diff of 262c9524686723809da14952c8f663797d6fd57c

262c9524686723809da14952c8f663797d6fd57c
diff --git a/resources/sql/016-hardcoded-hidden-unlisted.sql b/resources/sql/016-hardcoded-hidden-unlisted.sql
new file mode 100644
index 0000000..e8c2422
--- /dev/null
+++ b/resources/sql/016-hardcoded-hidden-unlisted.sql
@@ -0,0 +1,38 @@
+ALTER TABLE blog.Post
+ADD COLUMN IF NOT EXISTS hidden BOOLEAN NOT NULL DEFAULT TRUE,
+ADD COLUMN IF NOT EXISTS unlisted BOOLEAN NOT NULL DEFAULT FALSE;
+
+UPDATE blog.Post SET hidden = tags ? 'hidden';
+UPDATE blog.Post SET unlisted = tags ? 'unlisted';
+update blog.Post set tags = tags - 'hidden';
+update blog.Post set tags = tags - 'unlisted';
+
+ALTER TABLE blog.Post_History
+ADD COLUMN IF NOT EXISTS hidden BOOLEAN NOT NULL DEFAULT TRUE,
+ADD COLUMN IF NOT EXISTS unlisted BOOLEAN NOT NULL DEFAULT FALSE;
+
+UPDATE blog.Post_History SET hidden = tags ? 'hidden';
+UPDATE blog.Post_History SET unlisted = tags ? 'unlisted';
+update blog.Post_History set tags = tags - 'hidden';
+update blog.Post_History set tags = tags - 'unlisted';
+
+CREATE OR REPLACE FUNCTION push_to_history()
+RETURNS TRIGGER
+LANGUAGE plpgsql
+AS
+$$
+DECLARE local_version INT;
+BEGIN
+	SELECT  coalesce(MAX(ph.version), 0) + 1 INTO local_version 
+	FROM blog.Post p
+	LEFT JOIN blog.Post_History ph ON p.ID = ph.ID
+	WHERE p.id = OLD.id
+	GROUP BY p.ID;
+
+	INSERT INTO blog.Post_History(ID, Title, Content, creator_id, tags, created_at, version, hidden, unlisted)
+	VALUES (OLD.ID, OLD.Title, OLD.Content, OLD.creator_id, OLD.tags, OLD.created_at, local_version, OLD.hidden, OLD.unlisted);
+
+	RETURN NEW;
+END;
+$$;
+
diff --git a/resources/sql/post-fns.sql b/resources/sql/post-fns.sql
index 6982ac8..b076c4f 100644
--- a/resources/sql/post-fns.sql
+++ b/resources/sql/post-fns.sql
@@ -143,10 +143,10 @@ WHERE p.tags ? $1 AND (NOT p.tags ? 'hidden' OR (p.tags ? 'hidden' AND $2))
 GROUP BY p.ID, u.ID;
 
 -- name: insert-post
--- (:title, :content, :creator-id, :tags) ==
--- ($1, $2, $3, $4)
-insert into blog.post (title, content, creator_id, tags)
-values ($1, $2, $3, $4) returning id;
+-- (:title, :content, :creator-id, :tags, :hidden, :unlisted) ==
+-- ($1, $2, $3, $4, $5, ยง6)
+insert into blog.post (title, content, creator_id, tags, hidden, unlisted)
+values ($1, $2, $3, $4, $5, $6) returning id;
 
 -- name: update-post
 -- (:title, :content, :tags, :creator-id) ==
@@ -154,5 +154,12 @@ values ($1, $2, $3, $4) returning id;
 update blog.post
 set title = $1,
     content = $2,
-    tags = $3
-where id = $4;
+    tags = $3,
+    hidden = $4,
+    unlisted = $5
+where id = $6;
+
+-- name: set-hidden?
+update blog.post
+set hidden = $2 
+where id = $1;
diff --git a/src/migration-list.lisp b/src/migration-list.lisp
index e0cd49b..a14d5d8 100644
--- a/src/migration-list.lisp
+++ b/src/migration-list.lisp
@@ -20,6 +20,7 @@
 (defmigration "013-media-table.up")
 (defmigration "014-tag-hidden-unlisted-validator.up")
 (defmigration "015-image-post-pairing-view.up")
+(defmigration "016-hardcoded-hidden-unlisted")
 
 (defun prepare-e2e-migration ()
   (postmodern:execute "DELETE FROM blog.Users")
@@ -28,9 +29,7 @@
 					 "Playwright-user"
 					 "playwrighte"
 					 ""
-					 (sha-512 "p4ssw0rd")))))
-    (postmodern:execute "insert into blog.groupmapping (userid, groupid, primarygroup) values ($1, $2, $3)"
-			user-id 1 t)))
+					 (sha-512 "p4ssw0rd")))))))
 
 (deflispmigration _ "e2e-migration"
   (declare (ignore _))
diff --git a/src/routes/post-routes.lisp b/src/routes/post-routes.lisp
index 2b8a6bb..512038d 100644
--- a/src/routes/post-routes.lisp
+++ b/src/routes/post-routes.lisp
@@ -71,26 +71,13 @@
 	     (not (string= tag "unlisted")))
     (stringify (murja.posts.post-db:get-tagged tag :allow-hidden? nil))))
 
-;; routes that write to the db
-(defroute post-creation-route ("/api/posts/post" :method :post
-						 :decorators (@json
-							      @transaction
-							      @authenticated
-							      (@can? "create-post"))) ()
-  (log:info "inserting post")
-  (let* ((request-body (parse (hunchentoot:raw-post-data :force-text t)))
-	 (content (gethash "content" request-body))
-	 (title (gethash "title" request-body))
-	 (tags (stringify
-		(or (remove-if (partial #'string= "")
-			       (coerce 
-				(gethash "tags" request-body) 'list))
-		    #())))
-
-	 (creator-id (gethash "id" *user*)))
-    (assert creator-id)
-    (murja.posts.post-db:insert-post title content creator-id tags)
-    ""))
+(defroute create-empty-post-route ("/api/posts/new_post" :method :post
+							 :decorators (@json
+								      @transaction
+								      @authenticated
+								      (@can? "create-post"))) ()
+  (let ((creator-id (gethash "id" *user*)))
+    (prin1-to-string (caar (murja.posts.post-db:insert-post "New title" "New post" creator-id "[]")))))
 
 (defroute post-update-route ("/api/posts/post" :method :put 
 					       :decorators (@json
diff --git a/src/users/user-db.lisp b/src/users/user-db.lisp
index 1286293..e6cb1ac 100644
--- a/src/users/user-db.lisp
+++ b/src/users/user-db.lisp
@@ -1,6 +1,7 @@
 (defpackage :murja.users.user-db
   (:use :cl :postmodern)
-  (:export :get-session-user-by-id :select-user-by-login)
+  (:import-from :lisp-fixup :sha-512)
+  (:export :get-session-user-by-id :select-user-by-login :register-user)
   (:import-from :halisql :defqueries))
 
 (in-package :murja.users.user-db)
@@ -33,4 +34,12 @@
 	  (log:warn "login failed with params ~a, ~a. Users in db: ~{~a~%~}" username password-sha usrs)
 	  nil))))
 
+(defun register-user (username nickname img-location password)
+  "Inserts the new user into db and returns its id" 
+  (caar (postmodern:query "INSERT INTO blog.Users (username, nickname, img_location, password) VALUES ($1, $2, $3, $4) returning id"
+			  username
+			  nickname
+			  img-location
+			  (sha-512 password))))
+
   ;;(postmodern:connect-toplevel "blogdb" "blogadmin" "blog" "localhost")
diff --git a/test/tests.lisp b/test/tests.lisp
index f618231..6f8a048 100644
--- a/test/tests.lisp
+++ b/test/tests.lisp
@@ -1,6 +1,6 @@
 (defpackage murja.tests
-  (:use :cl
-   :fiveam)
+  (:use :cl :fiveam)
+  (:import-from :murja.users.user-db :register-user)
   (:export :main-suite))
 
 (in-package :murja.tests)
@@ -51,10 +51,29 @@
     (is (equalp successfully-migrated t))))
 	 
 (def-test history (:fixture prepare-db-and-server)
-;;  (is (equalp 3 55))
-  (is (equalp 1 1)))
+  (let ((posts (coerce (postmodern:query "SELECT * FROM blog.Post") 'list)))
+    (is (not posts)))
 
-(format t "Loaded the fucking tests~%")
+  (let* ((user-id (register-user "test-user" "Test User" "" "passu"))
+	 (post-id (caar (murja.posts.post-db:insert-post "Test title" "new post" user-id "[]" t t)))
+	 (history-data (coerce (postmodern:query "SELECT * FROM blog.Post_History") 'list)))
+    (is (not history-data))
+    (murja.posts.post-db:update-post "New title" "New Content" "[]" t t post-id)
+    (murja.posts.post-db:update-post "Newest title" "Newes Content" "[]" t t post-id)
+    (murja.posts.post-db:update-post "Newest title" "Newes Content" "['test-tag']" nil nil post-id)
+
+    (let ((post-data (postmodern:query "SELECT * FROM blog.Post" :array-hash))
+	  (history-data (coerce (postmodern:query "SELECT * FROM blog.Post_History" :array-hash) 'list))
+	  (count-of-hidden-history-entries 0))
+
+      (dolist (hist history-data)
+	(when (gethash "hidden" hist)
+	  (incf count-of-hidden-history-entries)))
+
+      (is (equalp 2
+		  count-of-hidden-history-entries)))))
+
+;; (setf fiveam:*run-test-when-defined* t)
 
 (if (and (sb-ext:posix-getenv "GHA")
 	 (not (run! 'main-suite)))