Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added log like function #7

Merged
merged 2 commits into from Apr 17, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
37 changes: 37 additions & 0 deletions sql/nft/website/functions/log_like.sql
@@ -0,0 +1,37 @@
CREATE OR REPLACE FUNCTION log_like
(
_account address,
_token_id uint256
)
RETURNS uint256
AS
$$
DECLARE _previous boolean;
DECLARE _token_likes uint256;
BEGIN
IF NOT EXISTS(SELECT 1 FROM nfts WHERE token_id = _token_id) THEN
RAISE EXCEPTION 'Invalid token id';
END IF;

SELECT likes.liked INTO _previous
WHERE likes.liked_by = _account
AND likes.token_id = _token_id
LIMIT 1;

UPDATE likes
SET
last_unliked_at = CASE WHEN liked = true THEN NOW() ELSE last_unliked_at END,
last_liked_at = CASE WHEN liked = false THEN NOW() ELSE last_liked_at END,
liked = !liked
WHERE likes.liked_by = _account
AND likes.token_id = _token_id;

UPDATE nfts
SET likes = likes + (CASE WHEN _previous = true THEN -1 ELSE 1 END)
WHERE token_id = _token_id
RETURNING nfts.likes INTO _token_likes;

RETURN _token_likes;
END
$$
LANGUAGE plpgsql;