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)))