Index: docs/changes.txt
===================================================================
--- docs/changes.txt	(revision 5e5232359b53109a505905efe8e1ac173b8b5c74)
+++ docs/changes.txt	(revision 5e5232359b53109a505905efe8e1ac173b8b5c74)
@@ -0,0 +1,9 @@
+- Cascade na reports i na guidelines
+- Likes impl*
+- Crud na replies
+- Ko ke vrakajs posle post baranje redirect, ta nosit do kaj so bese scrollnat na pageot ko si go pustil baranjeto.
+
+
+* kladov dislike, samo odzemat od likes msm ubo e taka ne ni trebat i dislikes da cuvame.
+
+Vidi vo todo za so da napres/dovrsis ti.
Index: docs/todo.txt
===================================================================
--- docs/todo.txt	(revision 79814c0c817222af2d45167e37e736ea10b9a38e)
+++ docs/todo.txt	(revision 5e5232359b53109a505905efe8e1ac173b8b5c74)
@@ -16,2 +16,13 @@
 - Referencira thread, koga pishi tekst, kaj bilo.
 - Strana za edit user details
+
+
+--------------------
+
+- searchni vo show-topic "todo-func", ke vidis
+- Security za post baranjava, sega samo sa kriet kopceto za edit i delete na discussion i takvi stvari, ama ne sa prat proverki vo metodite.
+- Reorganizacija ke trebit vo TopicController deka premn raboti msm imat tamu, mozit ubo ke e ako po generalni raboti so vazat za sive threads ko likes da e vo drug.
+- Vo pravo bese trebit posebni servisi da sa VDiscussionService i DiscussionService :)
+
+
+
Index: src/main/java/com/db/finki/www/build_board/controller/TopicController.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/controller/TopicController.java	(revision 79814c0c817222af2d45167e37e736ea10b9a38e)
+++ src/main/java/com/db/finki/www/build_board/controller/TopicController.java	(revision 5e5232359b53109a505905efe8e1ac173b8b5c74)
@@ -4,4 +4,5 @@
 import com.db.finki.www.build_board.entity.threads.Topic;
 import com.db.finki.www.build_board.service.threads.impl.DiscussionService;
+import com.db.finki.www.build_board.service.threads.impl.ThreadService;
 import com.db.finki.www.build_board.service.threads.itfs.TagService;
 import com.db.finki.www.build_board.service.threads.itfs.TopicService;
@@ -18,9 +19,11 @@
     private final TagService tagService;
     private final DiscussionService discussionService;
+    private final ThreadService threadService;
 
-    public TopicController(TopicService topicService, TagService tagService, DiscussionService discussionService) {
+    public TopicController(TopicService topicService, TagService tagService, DiscussionService discussionService, ThreadService threadService) {
         this.topicService = topicService;
         this.tagService = tagService;
         this.discussionService = discussionService;
+        this.threadService = threadService;
     }
 
@@ -29,4 +32,5 @@
         return "create-topic";
     }
+
     @GetMapping("/{topic-name}")
     public String showTopic(@PathVariable(name = "topic-name") String topicName, Model model) {
@@ -34,7 +38,8 @@
         model.addAttribute("topic", t);
         model.addAttribute("tags", tagService.findAllNotUsed(t));
-        model.addAttribute("replies", discussionService.findByTopic((long) t.getId()));
+        model.addAttribute("replies", discussionService.findByTopic(t.getId()));
         return "show-topic";
     }
+
     @PostMapping("/add")
     public String createTopic(@RequestParam String title, @RequestParam String description, HttpSession session) {
@@ -43,4 +48,5 @@
         return "redirect:/";
     }
+
     @PostMapping("/delete/{id}")
     public String deleteTopic(@PathVariable(name = "id") long id, HttpSession session) {
@@ -48,4 +54,5 @@
         return "redirect:/";
     }
+
     @PostMapping("/add-tag/{id}")
     public String addTag(@PathVariable(name = "id") long id,
@@ -54,5 +61,5 @@
                          Model model) {
         Topic t = topicService.getById(id);
-        topicService.addTagToTopic(t,tagName);
+        topicService.addTagToTopic(t, tagName);
         model.addAttribute("topic", t);
         model.addAttribute("tags", tagService.findAllNotUsed(t));
@@ -61,13 +68,6 @@
 
     @PostMapping("/edit/{id}")
-    public String editTopic(@PathVariable long id,@RequestParam String title, @RequestParam String content, Model model) {
-        Topic t = topicService.save(id,title,content);
-        model.addAttribute("topic", t);
-        model.addAttribute("tags", tagService.findAllNotUsed(t));
-        return "redirect:/topic/" + t.getTitle();
-    }
-    @PostMapping("/delete-tag/{topicId}/{tagName}")
-    public String deleteTag(@PathVariable long topicId, @PathVariable String tagName, Model model) {
-        Topic t = topicService.deleteTagFromTopic(topicId,tagName);
+    public String editTopic(@PathVariable long id, @RequestParam String title, @RequestParam String content, Model model) {
+        Topic t = topicService.save(id, title, content);
         model.addAttribute("topic", t);
         model.addAttribute("tags", tagService.findAllNotUsed(t));
@@ -75,3 +75,55 @@
     }
 
+    @PostMapping("/delete-tag/{topicId}/{tagName}")
+    public String deleteTag(@PathVariable long topicId, @PathVariable String tagName, Model model) {
+        Topic t = topicService.deleteTagFromTopic(topicId, tagName);
+        model.addAttribute("topic", t);
+        model.addAttribute("tags", tagService.findAllNotUsed(t));
+        return "redirect:/topic/" + t.getTitle();
+    }
+
+    @PostMapping("/{topic-name}/reply/add")
+    public String addReply(@PathVariable(name = "topic-name") String topicName, @RequestParam int parentId, @RequestParam String content, Model model, HttpSession session) {
+
+        BBUser user = (BBUser) session.getAttribute("user");
+        try {
+            discussionService.create(content, parentId, user);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return "redirect:/topic/" + topicName;
+    }
+
+    @PostMapping("/{topic-name}/reply/edit")
+    public String editReply(@PathVariable(name = "topic-name") String topicName, @RequestParam int replyId, @RequestParam String content, Model model, HttpSession session) {
+        discussionService.edit(replyId, content);
+        return "redirect:/topic/" + topicName;
+    }
+
+    @PostMapping("/{topic-name}/discussion/like")
+    public String like(@PathVariable(name = "topic-name") String topicName, @RequestParam int threadId, HttpSession session) {
+
+        BBUser user = (BBUser) session.getAttribute("user");
+        threadService.rate(threadId,user.getId(),true);
+
+        return "redirect:/topic/" + topicName;
+    }
+    @PostMapping("/{topic-name}/discussion/dislike")
+    public String dislike(@PathVariable(name = "topic-name") String topicName, @RequestParam int threadId, HttpSession session) {
+
+        BBUser user = (BBUser) session.getAttribute("user");
+        threadService.rate(threadId,user.getId(),false);
+
+        return "redirect:/topic/" + topicName;
+    }
+
+    @PostMapping("/{topic-name}/discussion/delete")
+    public String deleteDiscussion(@PathVariable(name = "topic-name") String topicName, @RequestParam int threadId, HttpSession session) {
+        BBUser user = (BBUser) session.getAttribute("user");
+        discussionService.delete(threadId);
+        return "redirect:/topic/" + topicName;
+    }
+
+
 }
Index: src/main/java/com/db/finki/www/build_board/entity/threads/BBThread.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/threads/BBThread.java	(revision 79814c0c817222af2d45167e37e736ea10b9a38e)
+++ src/main/java/com/db/finki/www/build_board/entity/threads/BBThread.java	(revision 5e5232359b53109a505905efe8e1ac173b8b5c74)
@@ -32,3 +32,14 @@
     )
     protected List<Tag> tags = new ArrayList<>();
+    @ManyToMany
+    @JoinTable(
+            name = "likes",
+            joinColumns = @JoinColumn(name = "thread_id"),
+            inverseJoinColumns = @JoinColumn(name = "user_id")
+    )
+    protected List<BBUser> likes = new ArrayList<>();
+
+    public int getNumLikes(){
+        return likes.size();
+    }
 }
Index: src/main/java/com/db/finki/www/build_board/entity/threads/discussion_threads/Discussion.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/threads/discussion_threads/Discussion.java	(revision 79814c0c817222af2d45167e37e736ea10b9a38e)
+++ src/main/java/com/db/finki/www/build_board/entity/threads/discussion_threads/Discussion.java	(revision 5e5232359b53109a505905efe8e1ac173b8b5c74)
@@ -3,7 +3,11 @@
 import com.db.finki.www.build_board.entity.threads.BBThread;
 import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
 
 @Entity
 @Table(name = "discussion_thread")
+@Getter
+@Setter
 public class Discussion extends BBThread {
     @ManyToOne
Index: src/main/java/com/db/finki/www/build_board/repository/UserRepository.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/repository/UserRepository.java	(revision 79814c0c817222af2d45167e37e736ea10b9a38e)
+++ src/main/java/com/db/finki/www/build_board/repository/UserRepository.java	(revision 5e5232359b53109a505905efe8e1ac173b8b5c74)
@@ -10,3 +10,4 @@
 public interface UserRepository extends JpaRepository<BBUser, Long> {
     Optional<BBUser> findByUsername(String username);
+    BBUser findById(long id);
 }
Index: src/main/java/com/db/finki/www/build_board/repository/threads/BBThreadRepository.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/repository/threads/BBThreadRepository.java	(revision 79814c0c817222af2d45167e37e736ea10b9a38e)
+++ src/main/java/com/db/finki/www/build_board/repository/threads/BBThreadRepository.java	(revision 5e5232359b53109a505905efe8e1ac173b8b5c74)
@@ -7,3 +7,4 @@
 @Repository
 public interface BBThreadRepository extends JpaRepository<BBThread, Long> {
+    BBThread findById(long id);
 }
Index: src/main/java/com/db/finki/www/build_board/repository/threads/DiscussionRepository.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/repository/threads/DiscussionRepository.java	(revision 5e5232359b53109a505905efe8e1ac173b8b5c74)
+++ src/main/java/com/db/finki/www/build_board/repository/threads/DiscussionRepository.java	(revision 5e5232359b53109a505905efe8e1ac173b8b5c74)
@@ -0,0 +1,11 @@
+package com.db.finki.www.build_board.repository.threads;
+
+import com.db.finki.www.build_board.entity.threads.discussion_threads.Discussion;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface DiscussionRepository extends JpaRepository<Discussion,Long> {
+
+    Discussion findDiscussionById(int discussionId);
+}
Index: src/main/java/com/db/finki/www/build_board/repository/threads/VDiscussRepo.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/repository/threads/VDiscussRepo.java	(revision 79814c0c817222af2d45167e37e736ea10b9a38e)
+++ src/main/java/com/db/finki/www/build_board/repository/threads/VDiscussRepo.java	(revision 5e5232359b53109a505905efe8e1ac173b8b5c74)
@@ -9,4 +9,5 @@
 @Repository
 public interface VDiscussRepo extends JpaRepository<VDiscussion,Long> {
-    List<VDiscussion> findVDiscussionByParentTopicId(Long topicId);
+    List<VDiscussion> findVDiscussionByParentTopicId(Integer topicId);
+    VDiscussion findVDiscussionByDiscussionId(Integer discussionId);
 }
Index: src/main/java/com/db/finki/www/build_board/service/threads/impl/DiscussionService.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/threads/impl/DiscussionService.java	(revision 79814c0c817222af2d45167e37e736ea10b9a38e)
+++ src/main/java/com/db/finki/www/build_board/service/threads/impl/DiscussionService.java	(revision 5e5232359b53109a505905efe8e1ac173b8b5c74)
@@ -1,8 +1,12 @@
 package com.db.finki.www.build_board.service.threads.impl;
 
+import com.db.finki.www.build_board.entity.threads.BBThread;
 import com.db.finki.www.build_board.entity.threads.discussion_threads.Discussion;
 import com.db.finki.www.build_board.entity.threads.discussion_threads.VDiscussion;
 import com.db.finki.www.build_board.entity.user_types.BBUser;
+import com.db.finki.www.build_board.repository.threads.BBThreadRepository;
+import com.db.finki.www.build_board.repository.threads.DiscussionRepository;
 import com.db.finki.www.build_board.repository.threads.VDiscussRepo;
+import jakarta.transaction.Transactional;
 import org.springframework.stereotype.Service;
 import java.util.List;
@@ -11,11 +15,22 @@
 public class DiscussionService {
     private final VDiscussRepo vDiscussRepo;
+    private final DiscussionRepository discussionRepository;
+    private final BBThreadRepository threadRepository;
 
-    public DiscussionService(VDiscussRepo vDiscussRepo) {
+    public DiscussionService(VDiscussRepo vDiscussRepo, DiscussionRepository discussionRepository, BBThreadRepository threadRepository) {
         this.vDiscussRepo = vDiscussRepo;
+        this.discussionRepository = discussionRepository;
+        this.threadRepository = threadRepository;
     }
 
-    public List<VDiscussion> findByTopic(Long topicId){
+    public List<VDiscussion> findByTopic(int topicId){
         return vDiscussRepo.findVDiscussionByParentTopicId(topicId);
+    }
+
+    public VDiscussion findVDiscussionById(int discussionId){
+        return vDiscussRepo.findVDiscussionByDiscussionId(discussionId);
+    }
+    public Discussion findDiscussionById(int discussionId){
+        return discussionRepository.findDiscussionById(discussionId);
     }
 
@@ -23,6 +38,27 @@
         return vDiscussRepo.findAll();
     }
-    public Discussion create(String content, Long parentId, BBUser user){
-        return null;
+
+    @Transactional
+    public Discussion create(String content, int parentId, BBUser user){
+
+        BBThread parent = threadRepository.findById(parentId);
+
+        Discussion reply = new Discussion();
+        reply.setContent(content);
+        reply.setUser(user);
+        reply.setParent(parent);
+
+        return discussionRepository.save(reply);
+    }
+
+    public Discussion edit(int replyId, String content) {
+        Discussion reply = discussionRepository.findDiscussionById(replyId);
+        reply.setContent(content);
+        return discussionRepository.save(reply);
+    }
+
+    public void delete(int threadId) {
+        Discussion d = discussionRepository.findDiscussionById(threadId);
+        discussionRepository.delete(d);
     }
 }
Index: src/main/java/com/db/finki/www/build_board/service/threads/impl/ThreadService.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/threads/impl/ThreadService.java	(revision 5e5232359b53109a505905efe8e1ac173b8b5c74)
+++ src/main/java/com/db/finki/www/build_board/service/threads/impl/ThreadService.java	(revision 5e5232359b53109a505905efe8e1ac173b8b5c74)
@@ -0,0 +1,35 @@
+package com.db.finki.www.build_board.service.threads.impl;
+
+import com.db.finki.www.build_board.entity.threads.BBThread;
+import com.db.finki.www.build_board.entity.user_types.BBUser;
+import com.db.finki.www.build_board.repository.UserRepository;
+import com.db.finki.www.build_board.repository.threads.BBThreadRepository;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class ThreadService {
+    private final BBThreadRepository bbThreadRepository;
+    private final UserRepository userRepository;
+
+    public ThreadService(BBThreadRepository bbThreadRepository, UserRepository userRepository) {
+        this.bbThreadRepository = bbThreadRepository;
+        this.userRepository = userRepository;
+    }
+
+    public void rate(int threadId, int userId,boolean like){
+        BBThread thread = bbThreadRepository.findById(threadId);
+        BBUser user = userRepository.findById(userId);
+        if(like){
+            List<BBUser> users = thread.getLikes();
+            if(!users.contains(user)){
+                thread.getLikes().add(user);
+            }
+
+        } else {
+            thread.getLikes().remove(user);
+        }
+        bbThreadRepository.save(thread);
+    }
+}
Index: src/main/resources/db/migration/V1__init_ddl.sql
===================================================================
--- src/main/resources/db/migration/V1__init_ddl.sql	(revision 79814c0c817222af2d45167e37e736ea10b9a38e)
+++ src/main/resources/db/migration/V1__init_ddl.sql	(revision 5e5232359b53109a505905efe8e1ac173b8b5c74)
@@ -80,5 +80,5 @@
 (
     id          serial,
-    topic_id    int references topic_thread (id),
+    topic_id    int references topic_thread (id) on delete cascade,
     description text,
     PRIMARY KEY (id, topic_id)
@@ -187,7 +187,7 @@
     description VARCHAR(200) NOT NULL,
     status      status,
-    thread_id   INT REFERENCES thread (id),
-    for_user_id INT REFERENCES users (id),
-    by_user_id  INT REFERENCES users (id),
+    thread_id   INT REFERENCES thread (id) on delete cascade,
+    for_user_id INT REFERENCES users (id) on delete cascade,
+    by_user_id  INT REFERENCES users (id) on delete cascade,
     PRIMARY KEY (id, thread_id, for_user_id, by_user_id)
 );
Index: src/main/resources/templates/show-topic.html
===================================================================
--- src/main/resources/templates/show-topic.html	(revision 79814c0c817222af2d45167e37e736ea10b9a38e)
+++ src/main/resources/templates/show-topic.html	(revision 5e5232359b53109a505905efe8e1ac173b8b5c74)
@@ -6,4 +6,15 @@
     <title th:text="${topic.getTitle()}"></title>
     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
+
+    <style>
+        .edit-reply-btn {
+            font-size: 12px;
+            padding: 2px 8px;
+            height: auto;
+            line-height: 1.2;
+        }
+    </style>
+
+
 </head>
 <body>
@@ -42,11 +53,12 @@
                 </div>
                 <div th:attr="data-reply-id=${topic.getId()}" class="card-body d-none reply-body">
-                    <form action="/topic/reply" method="post">
+                    <form th:action="'/topic/' + ${topic.getTitle()} + '/reply/add'" method="post">
                         <div class="mb-3">
                             <label for="reply" class="form-label">Your Reply</label>
-                            <textarea id="reply" name="reply" class="form-control" rows="3" placeholder="Write your reply here"
+                            <textarea name="content" class="form-control" rows="3" placeholder="Write your reply here"
                                       required></textarea>
                         </div>
                         <div class="d-flex justify-content-between">
+                            <input type="hidden" th:value="${topic.getId()}" name="parentId">
                             <button type="submit" class="btn btn-success w-10 ms-2">Post Reply</button>
                             <div class="d-flex justify-content-end reply-cancel">
@@ -76,61 +88,92 @@
         </div>
     </div>
-
-    <!--     Replies Section-->
-    <div th:each="reply : ${replies}" class="card shadow-sm mt-4"
+    <!--    DO TUKA E TOPIC-->
+
+    <!-- Replies Section -->
+    <div th:each="reply : ${replies}" class="card shadow-sm mt-4 d-flex"
          th:style="'margin-left: ' + (${reply.depth + 1} * 5) + '%'">
         <div class="card-header bg-light d-flex justify-content-between align-items-center">
-            <div>
-                <img th:src="${reply.getUser().getAvatarUrl()}" alt="Profile Picture" id="profileImage" class="rounded-circle border border-1 border-info me-3" style="width: 50px; height: 50px; object-fit: cover; vertical-align: middle;">
+            <div class="d-flex align-items-center w-100">
+                <img th:src="${reply.getUser().getAvatarUrl()}" alt="Profile Picture" id="profileImage"
+                     class="rounded-circle border border-1 border-info me-3"
+                     style="width: 50px; height: 50px; object-fit: cover; vertical-align: middle;">
                 <span th:text="${reply.getUser().getUsername()}">Reply Author</span>
-            </div>
-            <div th:if="${session.user.getId() != null && session.user.getId() == reply.getUser().getId()}">
-                <button class="btn btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#editReplyModal"
-                        th:attr="data-reply-id=${reply}">Edit Reply
+                <span class="ms-auto text-muted d-flex align-items-center">
+                    <i class="bi bi-arrow-return-right me-2"></i>
+                     <strong th:text="'Replying to:  ' + ${reply.getDiscussion().getParent().getUser().getUsername()}"></strong>
+                </span>
+
+            </div>
+            <div th:if="${session.user.getId() != null && session.user.getId() == reply.getUser().getId()}"
+                 class="ms-5 d-flex align-items-center justify-content-end p-none">
+                <button class="btn btn-warning btn-sm edit-reply-btn"
+                        th:attr="data-reply-id=${reply.getDiscussion().getId()}">Edit
                 </button>
-            </div>
-        </div>
-
+                <form th:action="'/topic/' + ${topic.getTitle()} + '/discussion/delete'" method="post">
+                    <input type="hidden" name="threadId" th:value="${reply.getDiscussion().getId()}">
+                    <button class="btn btn-danger btn-sm edit-reply-btn ms-2"
+                            th:attr="data-reply-id=${reply.getDiscussion().getId()}">Delete
+                    </button>
+                </form>
+            </div>
+        </div>
+
+
+        <!-- Reply content -->
         <div class="card-body">
-            <p th:text="${reply.getDiscussion().getContent()}">Reply content goes here.</p>
-        </div>
-
-        <div class="modal fade" id="editReplyModal" tabindex="-1" aria-labelledby="editReplyModalLabel"
-             aria-hidden="true">
-            <div class="modal-dialog">
-                <div class="modal-content">
-                    <div class="modal-header">
-                        <h5 class="modal-title" id="editReplyModalLabel">Edit Reply</h5>
-                        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
-                    </div>
-                    <div class="modal-body">
-                        <form th:action="@{/topic/discussion/{id}/edit (id=${reply.getId()})}" method="post">
-                            <div class="mb-3">
-                                <label for="replyContent" class="form-label">Reply Content</label>
-                                <textarea id="replyContent" name="content" class="form-control" rows="3"
-                                          th:text="${reply.getDiscussion().getContent()}" required></textarea>
-                            </div>
-                            <button type="submit" class="btn btn-primary w-100">Save Changes</button>
-                        </form>
-                    </div>
-                </div>
-            </div>
-        </div>
-
-        <div class="d-flex justify-content-end">
-            <button class="btn btn-info btn-sm m-2 reply-button"
-                    th:attr="data-reply-id=${reply.getDiscussion().getId()}">Reply
-            </button>
-        </div>
-
-
+            <div th:attr="data-reply-id=${reply.getDiscussion().getId()}" class="reply-content">
+                <p th:text="${reply.getDiscussion().getContent()}">Reply content goes here.</p>
+            </div>
+            <div class="d-none edit-reply" th:attr="data-reply-id=${reply.getDiscussion().getId()}">
+                <form th:action="'/topic/' + ${topic.getTitle()} + '/reply/edit'" method="post">
+                    <input type="hidden" name="replyId" th:value="${reply.getDiscussion().getId()}">
+                    <textarea name="content" th:text="${reply.getDiscussion().getContent()}" class="form-control"
+                              rows="3" placeholder="Write your reply here"></textarea>
+
+                    <button type="submit" class="btn btn-sm btn-success mt-2">Save Changes</button>
+                    <button type="button" class="btn btn-sm btn-danger mt-2"
+                            th:onclick="'hideEditReplyBox(' + ${reply.getDiscussion().getId()} + ')'">Cancel
+                    </button>
+                </form>
+
+            </div>
+
+            <!-- Buttons Row -->
+            <div class="d-flex justify-content-between align-items-center mt-3 pt-3">
+                <div class="d-flex flex-row">
+                    <form th:action="'/topic/' + ${topic.getTitle()} + '/discussion/like'" method="post">
+                        <input type="hidden" name="threadId" th:value="${reply.getId()}">
+                        <button type="submit" class="btn btn-outline-success btn-sm me-2 like-button"
+                                th:attr="data-reply-id=${reply.getDiscussion().getId()}">
+                            👍 Like (<span th:text="${reply.getDiscussion().getNumLikes()}">0</span>)
+                        </button>
+                    </form>
+                    <form th:action="'/topic/' + ${topic.getTitle()} + '/discussion/dislike'" method="post">
+                        <input type="hidden" name="threadId" th:value="${reply.getId()}">
+                        <button class="btn btn-outline-danger btn-sm dislike-button"
+                                th:attr="data-reply-id=${reply.getDiscussion().getId()}">
+                            👎 Dislike
+                        </button>
+                    </form>
+                </div>
+                <div>
+                    <button class="btn btn-info btn-sm reply-button"
+                            th:attr="data-reply-id=${reply.getDiscussion().getId()}">Reply
+                    </button>
+                </div>
+            </div>
+        </div>
+
+
+        <!-- Add Reply Card Hidden -->
         <div th:attr="data-reply-id=${reply.getDiscussion().getId()}" class="card-body d-none reply-body">
-            <form action="/topic/reply" method="post">
+            <form th:action="'/topic/' + ${topic.getTitle()} + '/reply/add'" method="post">
                 <div class="mb-3">
                     <label for="reply" class="form-label">Your Reply</label>
-                    <textarea name="reply" class="form-control" rows="3" placeholder="Write your reply here"
+                    <textarea name="content" class="form-control" rows="3" placeholder="Write your reply here"
                               required></textarea>
                 </div>
                 <div class="d-flex justify-content-between">
+                    <input type="hidden" th:value="${reply.getId()}" name="parentId">
                     <button type="submit" class="btn btn-success w-10 ms-2">Post Reply</button>
                     <div class="d-flex justify-content-end reply-cancel">
@@ -142,23 +185,4 @@
             </form>
         </div>
-
-
-        <!-- Reply Form -->
-        <!--        <div class="card shadow-sm mt-5">-->
-        <!--            <div class="card-header bg-success text-white">-->
-        <!--                <h5 class="mb-0">Add a Reply</h5>-->
-        <!--            </div>-->
-        <!--            <div class="card-body">-->
-        <!--                <form action="/topic/reply" method="post">-->
-        <!--                    <div class="mb-3">-->
-        <!--                        <label for="reply" class="form-label">Your Reply</label>-->
-        <!--                        <textarea id="reply" name="reply" class="form-control" rows="3" placeholder="Write your reply here" required></textarea>-->
-        <!--                    </div>-->
-        <!--                    <button type="submit" class="btn btn-success w-100">Post Reply</button>-->
-        <!--                </form>-->
-        <!--            </div>-->
-        <!--        </div>-->
-
-
     </div>
 
@@ -226,4 +250,19 @@
 
 <script>
+
+    window.addEventListener("beforeunload", function () {
+        sessionStorage.setItem("scrollPosition", window.scrollY);
+    });
+
+    window.onload = function () {
+        const savedScrollPosition = sessionStorage.getItem("scrollPosition");
+
+        if (savedScrollPosition) {
+            window.scrollTo(0, savedScrollPosition);
+            sessionStorage.removeItem("scrollPosition");
+        }
+    };
+
+
     document.addEventListener("DOMContentLoaded", function () {
         const existingTags = document.getElementById("existingTags");
@@ -244,4 +283,27 @@
         });
     });
+
+
+    //todo-func
+
+    //ova funckcija rabotat gore ja koristam vidi gore vo html
+    function hideEditReplyBox(id) {
+        console.log("HIDE EDIT REPLY")
+        const editBox = document.querySelector(`.edit-reply[data-reply-id="${id}"]`)
+        const contentBox = document.querySelector(`.reply-content[data-reply-id="${id}"]`)
+        editBox.classList.remove("d-block");
+        editBox.classList.add("d-none");
+        contentBox.classList.remove("d-none")
+        contentBox.classList.add("d-block");
+    }
+
+
+    function displayAddReplyBox() {
+
+    }
+
+
+    // podeli go ova so ifojte vo funkcii
+
     document.querySelector("main").addEventListener("click", ev => {
         const target = ev.target;
@@ -261,4 +323,11 @@
             replyBtn.classList.remove('d-none');
             replyBtn.classList.add('d-block');
+        } else if (target.classList.contains("edit-reply-btn")) {
+            const id = target.dataset.replyId;
+            const editBox = document.querySelector(`.edit-reply[data-reply-id="${id}"]`)
+            const contentBox = document.querySelector(`.reply-content[data-reply-id="${id}"]`)
+            editBox.classList.remove("d-none");
+            editBox.classList.add("d-block");
+            contentBox.classList.add("d-none")
         }
     })
