Repository: StudyConnect-ZHAW/Backend
Pull request #45: Feat/#38 forum endpoint
Author: login: Gleb-Sokolovskiy
Labels: name: docs
description: Improvements or additions to documentation
name: feat
description: New feature or request
Created: 2025-04-02T18:09:31Z | Merged: 2025-04-05T10:29:14Z

# Resolves
closes #38 
## Description

Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.

## Checklist

Please make sure that the following items have been completed before submitting this pull request:

- [ ] All code has been properly tested
- [ ] All tests pass successfully
- [ ] Code has been reviewed for clarity, readability, and maintainability
- [ ] Code has been properly documented with comments


Linked issue #38: Subtask 2: Design of the forum endpoint
**Is your feature request related to a problem? Please describe.**
Create the design and prototype to create and comment on a forum post

**Describe the solution you'd like**
Clarify what is necessary to set up a forum.

- [ ] Sequence diagram
- [ ] Endpoint description (dotNet Code)

**Describe alternatives you've considered**
None – this is the standard entry point.

**Additional context**
Clarify whether frontend and backend have the same idea

**Story points:** 3


Diff:
diff --git a/StudyConnect.API/Controllers/Forum/CommentController.cs b/StudyConnect.API/Controllers/Forum/CommentController.cs
new file mode 100644
index 00000000..863879e7
--- /dev/null
+++ b/StudyConnect.API/Controllers/Forum/CommentController.cs
@@ -0,0 +1,81 @@
+using Microsoft.AspNetCore.Mvc;
+
+namespace StudyConnect.API.Controllers.Forum;
+
+/// <summary>
+/// Controller for managing the comments
+/// Provides endpoints to create, retrieve, update, and delete comments.
+/// </summary>
+[ApiController]
+public class CommentController : BaseController
+{
+    /// <summary>
+    /// Get all comments of a post
+    /// </summary>
+    /// <param name="pid"> unique identifier of the post </param>
+    /// <returns> HTTP 200 OK response on success </returns>
+    [Route("v1/forum/{pid}/comments")]
+    [HttpGet]
+    public IActionResult GetAllCommentsOfPost([FromRoute] Guid pid)
+    {
+        return Ok();
+    }
+
+    /// <summary>
+    /// Get comment of a post by its ID
+    /// </summary>
+    /// <param name="cid"> unique identifier of the comment </param>
+    /// <returns> the comment details in JSON </returns>
+    [Route("v1/comments/{cid}")]
+    [HttpGet]
+    [ProducesResponseType(typeof(string), StatusCodes.Status200OK)]
+    public IActionResult GetCommentById([FromRoute] Guid cid)
+    {
+        var mockComment = @"
+        { 
+                ""CommentId"": ""d2b516f0-d3f5-4a02-8191-5d122c375b2d"",
+                ""PostId"": ""d2b876f0-d6h9-4a02-8965-5d248b573j8l"",
+                ""Author"": ""John Doe"",
+                ""Content"": ""This is a mock content for a mock post."",
+                ""MadeAt"": ""2025-03-29T12:34:56""
+        }";
+
+        return Ok(mockComment);
+    }
+
+    /// <summary>
+    /// Creates a new comment
+    /// </summary>
+    /// <param name="pid"> unique identifier of the post </param>
+    /// <returns> HTTP 200 OK response on success </returns>
+    [Route("v1/forum/{pid}/comments")]
+    [HttpPost]
+    public IActionResult CreateComment([FromRoute] Guid pid)
+    {
+        return Ok();
+    }
+
+    /// <summary>
+    /// Updates an existing comment
+    /// </summary>
+    /// <param name="cid"> unique identifier of the comment </param>
+    /// <returns> HTTP 200 OK response on success </returns>
+    [Route("v1/comments/{cid}")]
+    [HttpPut]
+    public IActionResult UpdateComment([FromRoute] Guid cid)
+    {
+        return Ok();
+    }
+
+    /// <summary>
+    /// Deletes an existing comment
+    /// </summary>
+    /// <param name="cid"> unique identifier of the comment </param>
+    /// <returns> HTTP 200 OK response on success </returns>
+    [Route("v1/comments/{cid}")]
+    [HttpDelete]
+    public IActionResult DeleteComment([FromRoute] Guid cid)
+    {
+        return Ok();
+    }
+}
\ No newline at end of file
diff --git a/StudyConnect.API/Controllers/Forum/PostController.cs b/StudyConnect.API/Controllers/Forum/PostController.cs
new file mode 100644
index 00000000..de7f2cf2
--- /dev/null
+++ b/StudyConnect.API/Controllers/Forum/PostController.cs
@@ -0,0 +1,74 @@
+using Microsoft.AspNetCore.Mvc;
+
+namespace StudyConnect.API.Controllers.Forum;
+
+/// <summary>
+/// Controller for managing the posts
+/// Provides endpoints to create, retrieve, update, and delete posts.
+/// </summary>
+[ApiController]
+[Route("v1/forum")]
+public class PostController: BaseController
+{
+    /// <summary>
+    /// Creates a new post
+    /// </summary>
+    /// <returns> HTTP 200 OK response on success </returns>
+    [HttpPost]
+    public IActionResult AddPost() 
+    {
+        return Ok();
+    }
+
+    /// <summary>
+    /// Get a post by its ID
+    /// </summary>
+    /// <param name="pid"> unique identifier of the post </param>
+    /// <returns> the post details in JSON </returns>
+    [HttpGet("{pid}")]
+    [ProducesResponseType(typeof(string), StatusCodes.Status200OK)]
+    public IActionResult GetPost([FromRoute] Guid pid ) 
+    {
+        string mockPost = @"
+        { 
+            ""PostID"": ""d2b876f0-d6h9-4a02-8965-5d248b573j8l"",
+            ""Author"": ""John Doe"",  
+            ""Title"": ""Mock Discussion Post Title"",
+            ""Tags"": [""C#"", ""API"", ""Mocking""],
+            ""MadeAt"": ""2025-03-29T12:34:56"",
+            ""Comments"": [
+                {
+                    ""CommentID"": ""d2b516f0-d3f5-4a02-8191-5d122c375b2d"",
+                    ""PostID"": ""d2b876f0-d6h9-4a02-8965-5d248b573j8l"",
+                    ""Author"": ""John Doe"",
+                    ""Content"": ""This is a mock content for a mock post."",
+                    ""MadeAt"": ""2025-03-29T12:34:56""
+                }
+            ]
+        }";
+
+        return Ok(mockPost);
+    }
+
+    /// <summary>
+    /// Update existing post
+    /// </summary>
+    /// <param name="pid"> unique identifier of the post </param>
+    /// <returns> HTTP 200 OK response on success </returns>
+    [HttpPut("{pid}")]
+    public IActionResult UpdatePost([FromRoute] Guid pid)
+    {
+        return Ok();
+    }
+
+    /// <summary>
+    /// Deletes an existing post
+    /// </summary>
+    /// <param name="pid"> unique identifier of the post </param>
+    /// <returns> HTTP 200 OK response on success </returns>
+    [HttpDelete("{pid}")]
+    public IActionResult DeletePost([FromRoute] Guid pid)
+    {
+        return Ok();
+    }
+}
diff --git a/StudyConnect.API/Controllers/GroupsController.cs b/StudyConnect.API/Controllers/GroupsController.cs
deleted file mode 100644
index 5ade1476..00000000
--- a/StudyConnect.API/Controllers/GroupsController.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Mvc;
-
-namespace StudyConnect.API.Controllers.Groups
-{
-    [ApiController]
-    public class GroupsController : ControllerBase
-    {
-        /// create Groups
-        [Route("v1/groups")]
-        [HttpPost]
-        public IActionResult AddGroup(){
-            return Ok();
-        }
-
-        /// delete Groups by id
-         [Route("v1/groups/{id}")]
-         [HttpDelete]
-        public IActionResult DeleteGroups([FromRoute] Guid id)
-         {
-             return Ok();
-         }
-
-        /// info Group
-         [Route("v1/groups/{id}")]
-         [HttpGet]
-        public IActionResult GetGroup([FromRoute] Guid id)
-        {
-            return Ok();
-        }
-
-        /// update Group
-         [Route("v1/groups/update/{id}")]
-         [HttpPut]
-        public IActionResult UpdateGroup([FromRoute] Guid id) /// name , description, public/private
-        {
-            return Ok();
-        }
-
-        /// join Group
-         [Route("v1/groups/join/{id}")]
-         [HttpPost]
-        public IActionResult JoinGroup([FromRoute] Guid id)
-        {
-            return Ok();
-        }
-
-        /// leave Group
-         [Route("v1/groups/{id}")]
-         [HttpPost]
-        public IActionResult LeaveGroup([FromRoute] Guid id)
-        {
-            return Ok();
-        }
-
-    }
-
-
-
-
-}
\ No newline at end of file


Reviews:
user: login: copilot-pull-request-reviewer[bot]
body: ## Pull Request Overview

This PR introduces a new forum endpoint feature and related domain models for posts and comments. Key changes include:
- Adding domain models (ForumPost and ForumComments) for managing forum discussions.
- Creating a controller (ForumController) with endpoints to add, retrieve, update, and delete posts and comments.
- Including mock data responses for GET endpoints to simulate forum responses.

### Reviewed Changes

Copilot reviewed 2 out of 3 changed files in this pull request and generated 1 comment.

| File | Description |
| ---- | ----------- |
| StudyConnect.API/ForumDiscussion.cs | Introduces ForumPost and ForumComments classes for handling forum discussions |
| StudyConnect.API/Controllers/Forum/ForumController.cs | Implements API endpoints for posts and comments operations |

<details>
<summary>Files not reviewed (1)</summary>

* **StudyConnect.API/StudyConnect.API.csproj**: Language not supported
</details>

<details>
<summary>Comments suppressed due to low confidence (4)</summary>

**StudyConnect.API/ForumDiscussion.cs:10**
* Consider renaming the 'Modul' property to 'Module' for clarity and consistency.
```
public string Modul { get; private set; }
```
**StudyConnect.API/ForumDiscussion.cs:41**
* The class name 'ForumComments' is plural but represents a single comment. Rename it to 'ForumComment' for clarity.
```
public class ForumComments
```
**StudyConnect.API/ForumDiscussion.cs:35**
* [nitpick] The 'AddPost' method in 'ForumPost' actually adds a comment; consider renaming it to 'AddComment' to reflect its functionality.
```
public void AddPost(Guid author, string content)
```
**StudyConnect.API/Controllers/Forum/ForumController.cs:43**
* The trailing comma after the 'Comments' array in the mock JSON may result in invalid JSON syntax. Remove the trailing comma.
```
            }],
```
</details>


state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-03T06:40:30Z
user: login: copilot-pull-request-reviewer[bot]
body: 

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.


<details>
<summary>Comments suppressed due to low confidence (3)</summary>

**StudyConnect.API/Controllers/Forum/PostController.cs:47**
* Trailing comma in the JSON array may cause parsing errors in strict JSON parsers; consider removing the trailing comma.
```
            ],
```
**StudyConnect.API/Controllers/Forum/CommitController.cs:10**
* [nitpick] The controller name 'CommitController' is misleading as it manages comments; consider renaming it to 'CommentController' for clarity.
```
public class CommitController : BaseController
```
**StudyConnect.API/Controllers/Forum/CommitController.cs:40**
* Trailing comma in the JSON object may cause parsing issues in strict JSON implementations; consider removing it.
```
                "MadeAt": "2025-03-29T12:34:56",
```
</details>


state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T18:29:06Z
user: login: copilot-pull-request-reviewer[bot]
body: 

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.


<details>
<summary>Comments suppressed due to low confidence (1)</summary>

**StudyConnect.API/Controllers/Forum/CommentController.cs:29**
* The route pattern for retrieving a single comment ('v1/comments/{cid}') is inconsistent with the collection endpoint ('v1/forum/{pid}/comments'). Consider standardizing the route patterns, for example by using 'v1/forum/comments/{cid}', to enhance API clarity.
```
[Route("v1/comments/{cid}")]
```
</details>


state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T18:37:03Z
user: login: Danbuch
body: Looks good for me.
Everything seems to work.
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T20:36:02Z
user: login: Newoss
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-04-05T05:18:53Z

Review comments:
diff_hunk: @@ -0,0 +1,137 @@
+using Microsoft.AspNetCore.Mvc;
+
+namespace StudyConnect.API.Controllers.Forum;
+/// <summary>
+/// Controller for managing the forum 
+/// Provides endpoints to create, retrieve, update, and delete discussions and posts.
+/// </summary>
+[ApiController]
+[Route("v1/forum")]
+public class ForumController: ControllerBase
+{
+    /// <summary>
+    /// Creates a new post
+    /// </summary>
+    /// <return> HTTP 200 OK response on success </return>
+    [HttpPost]
+    public IActionResult AddPost() 
+    {
+        return Ok();
+    }
+
+    /// <summary>
+    /// Get a post by its ID
+    /// </summary>
+    /// <param name="did"> unique identifier of the post </param>
+    /// <return> the post details in JSON </return>
+    [HttpGet("{did}")]
+    public IActionResult GetPost([FromRoute] Guid did ) 
+    {
+        string mockPost = @"
+        { 
+            ""PostId"": ""d2b876f0-d6h9-4a02-8965-5d248b573j8l"",
+            ""Author"": ""John Doe"",  
+            ""Title"": ""Mock Discussion Post Title"",
+            ""Tags"": [""C#"", ""API"", ""Mocking""],
+            ""MadeAt"": ""2025-03-29T12:34:56"",
+            ""Comments"": [{
+                ""CommentId"": ""d2b516f0-d3f5-4a02-8191-5d122c375b2d"",
+                ""PostId"": ""d2b876f0-d6h9-4a02-8965-5d248b573j8l"",
+                ""Author"": ""John Doe"",
+                ""Content"": ""This is a mock content for a mock post."",
+                ""MadeAt"": ""2025-03-29T12:34:56""
+            }],
+        }";
+
+        return Ok(mockPost);
+    }
+
+    /// <summary>
+    /// Update existing post
+    /// </summary>
+    /// <param name="did"> unique identifier of the post </param>
+    /// <return> HTTP 200 OK response on success </return>
+    [HttpPut("{did}")]
+    public IActionResult UpdatePost([FromRoute] Guid did)
+    {
+        return Ok();
+    }
+
+    /// <summary>
+    /// Deletes an existing post
+    /// </summary>
+    /// <param name="did"> unique identifier of the post </param>
+    /// <return> HTTP 200 OK response on success </return>
+    [HttpDelete("{did}")]
+    public IActionResult DeletePost([FromRoute] Guid did)
+    {
+        return Ok();
+    }
+
+    /// <summary>
+    /// Get all comments of a post
+    /// </summary>
+    /// <param name="did"> unique identifier of the post </param>
+    /// <return> HTTP 200 OK response on success </return>
+    [HttpGet("{did}/comments")]
+    public IActionResult GetAllCommentsOfPost([FromRoute] Guid did)
+    {
+        return Ok();
+    }
+
+    /// <summary>
+    /// Get comment of a post by its ID
+    /// </summary>
+    /// <param name="did"> unique identifier of the post </param>
+    /// <param name="pid"> unique identifier of the comment </param>
+    /// <return> the comment details in JSON </return>
+    [HttpGet("{did}/comments/{pid}")]
+    public IActionResult GetCommentbyId([FromRoute] Guid did, [FromRoute] Guid pid)
+    {
+        var mockComment = @"
+        { 
+                ""CommentId"": ""d2b516f0-d3f5-4a02-8191-5d122c375b2d"",
+                ""PostId"": ""d2b876f0-d6h9-4a02-8965-5d248b573j8l"",
+                ""Author"": ""John Doe"",
+                ""Content"": ""This is a mock content for a mock post."",
+                ""MadeAt"": ""2025-03-29T12:34:56""
+        }";
+
+        return Ok(mockComment);
+    }
+
+    /// <summary>
+    /// Creates a new comment
+    /// </summary>
+    /// <param name="did"> unique identifier of the post </param>
+    /// <return> HTTP 200 OK response on success </return>
+    [HttpPost("{did}/comments")]
+    public IActionResult CreateComment([FromRoute] Guid did)
+    {
+        return Ok();
+    }
+
+    /// <summary>
+    /// Updates an existing comment
+    /// </summary>
+    /// <param name="did"> unique identifier of the post </param>
+    /// <param name="pid"> unique inheritdoc of the comment </param>
path: StudyConnect.API/Controllers/Forum/ForumController.cs
user: login: Copilot
body: There is a typo in the parameter description: 'unique inheritdoc of the comment' should likely be 'unique identifier of the comment'.
```suggestion
    /// <param name="pid"> unique identifier of the comment </param>
```
created_at: 2025-04-03T06:40:30Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,81 @@
+using Microsoft.AspNetCore.Mvc;
+
+namespace StudyConnect.API.Controllers.Forum;
+
+/// <summary>
+/// Controller for managing the comments
+/// Provides endpoints to create, retrieve, update, and delete comments.
+/// </summary>
+[ApiController]
+public class CommitController : BaseController
+{
+    /// <summary>
+    /// Get all comments of a post
+    /// </summary>
+    /// <param name="pid"> unique identifier of the post </param>
+    /// <returns> HTTP 200 OK response on success </returns>
+    [Route("v1/fourm/{pid}/comments")]
path: StudyConnect.API/Controllers/Forum/CommitController.cs
user: login: Copilot
body: The route contains a typo ('fourm' instead of 'forum'); please correct it.
```suggestion
    [Route("v1/forum/{pid}/comments")]
```
created_at: 2025-04-04T18:29:05Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,81 @@
+using Microsoft.AspNetCore.Mvc;
+
+namespace StudyConnect.API.Controllers.Forum;
+
+/// <summary>
+/// Controller for managing the comments
+/// Provides endpoints to create, retrieve, update, and delete comments.
+/// </summary>
+[ApiController]
+public class CommitController : BaseController
path: StudyConnect.API/Controllers/Forum/CommitController.cs
user: login: Danbuch
body: ```suggestion
public class CommentController : BaseController
```
Typo
created_at: 2025-04-04T18:30:34Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-04-02T18:13:30Z
body: **Backend SonarQube Analysis Results** (Branch Scan)

*   **Quality Gate Status:** `ERROR`

*   **Conditions:**
    - new_reliability_rating (OK): 1 (required 1)
- new_security_rating (OK): 1 (required 1)
- new_maintainability_rating (OK): 1 (required 1)
- new_coverage (ERROR): 0.0 (required 80)
- new_duplicated_lines_density (OK): 0.0 (required 3)

[View Full Report on SonarQube](https://sonarqube.pm4.init-lab.ch/dashboard?id=StudyConnect)
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-03T00:00:19Z
body: **Backend SonarQube Analysis Results** (Branch Scan)

*   **Quality Gate Status:** `ERROR`

*   **Conditions:**
    - new_reliability_rating (OK): 1 (required 1)
- new_security_rating (OK): 1 (required 1)
- new_maintainability_rating (OK): 1 (required 1)
- new_coverage (ERROR): 0.0 (required 80)
- new_duplicated_lines_density (OK): 0.0 (required 3)

[View Full Report on SonarQube](https://sonarqube.pm4.init-lab.ch/dashboard?id=StudyConnect)
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-03T07:17:55Z
body: **Backend SonarQube Analysis Results** (Branch Scan)

*   **Quality Gate Status:** `ERROR`

*   **Conditions:**
    - new_reliability_rating (OK): 1 (required 1)
- new_security_rating (OK): 1 (required 1)
- new_maintainability_rating (OK): 1 (required 1)
- new_coverage (ERROR): 0.0 (required 80)
- new_duplicated_lines_density (OK): 0.0 (required 3)

[View Full Report on SonarQube](https://sonarqube.pm4.init-lab.ch/dashboard?id=StudyConnect)
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-03T07:27:21Z
body: **Backend SonarQube Analysis Results** (Branch Scan)

*   **Quality Gate Status:** `OK`

*   **Conditions:**
    - new_reliability_rating (OK): 1 (required 1)
- new_security_rating (OK): 1 (required 1)
- new_maintainability_rating (OK): 1 (required 1)
- new_duplicated_lines_density (OK): 0.0 (required 3)

[View Full Report on SonarQube](https://sonarqube.pm4.init-lab.ch/dashboard?id=StudyConnect)
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-03T07:34:58Z
body: **Backend SonarQube Analysis Results** (Branch Scan)

*   **Quality Gate Status:** `ERROR`

*   **Conditions:**
    - new_reliability_rating (OK): 1 (required 1)
- new_security_rating (OK): 1 (required 1)
- new_maintainability_rating (OK): 1 (required 1)
- new_coverage (ERROR): 0.0 (required 80)
- new_duplicated_lines_density (OK): 0.0 (required 3)

[View Full Report on SonarQube](https://sonarqube.pm4.init-lab.ch/dashboard?id=StudyConnect)
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-03T09:37:41Z
body: **Backend SonarQube Analysis Results** (Branch Scan)

*   **Quality Gate Status:** `ERROR`

*   **Conditions:**
    - new_reliability_rating (OK): 1 (required 1)
- new_security_rating (OK): 1 (required 1)
- new_maintainability_rating (OK): 1 (required 1)
- new_coverage (ERROR): 0.0 (required 80)
- new_duplicated_lines_density (ERROR): 26.04374 (required 3)

[View Full Report on SonarQube](https://sonarqube.pm4.init-lab.ch/dashboard?id=StudyConnect)
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-03T09:58:59Z
body: **Backend SonarQube Analysis Results** (Branch Scan)

*   **Quality Gate Status:** `ERROR`

*   **Conditions:**
    - new_reliability_rating (OK): 1 (required 1)
- new_security_rating (OK): 1 (required 1)
- new_maintainability_rating (OK): 1 (required 1)
- new_coverage (ERROR): 0.0 (required 80)
- new_duplicated_lines_density (ERROR): 26.2 (required 3)

[View Full Report on SonarQube](https://sonarqube.pm4.init-lab.ch/dashboard?id=StudyConnect)
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-03T10:36:24Z
body: **Backend SonarQube Analysis Results** (Branch Scan)

*   **Quality Gate Status:** `ERROR`

*   **Conditions:**
    - new_reliability_rating (OK): 1 (required 1)
- new_security_rating (OK): 1 (required 1)
- new_maintainability_rating (OK): 1 (required 1)
- new_duplicated_lines_density (ERROR): 26.2 (required 3)

[View Full Report on SonarQube](https://sonarqube.pm4.init-lab.ch/dashboard?id=StudyConnect)
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-03T18:13:41Z
body: **Backend SonarQube Analysis Results** (Branch Scan)

*   **Quality Gate Status:** `OK`

*   **Conditions:**
    - new_reliability_rating (OK): 1 (required 1)
- new_security_rating (OK): 1 (required 1)
- new_maintainability_rating (OK): 1 (required 1)
- new_duplicated_lines_density (OK): 0.0 (required 3)

[View Full Report on SonarQube](https://sonarqube.pm4.init-lab.ch/dashboard?id=StudyConnect)
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-03T18:44:25Z
body: **Backend SonarQube Analysis Results** (Branch Scan)

*   **Quality Gate Status:** `ERROR`

*   **Conditions:**
    - new_reliability_rating (OK): 1 (required 1)
- new_security_rating (OK): 1 (required 1)
- new_maintainability_rating (OK): 1 (required 1)
- new_coverage (ERROR): 0.0 (required 80)
- new_duplicated_lines_density (OK): 0.0 (required 3)

[View Full Report on SonarQube](https://sonarqube.pm4.init-lab.ch/dashboard?id=StudyConnect)
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-03T18:58:17Z
body: **Backend SonarQube Analysis Results** (Branch Scan)

*   **Quality Gate Status:** `ERROR`

*   **Conditions:**
    - new_reliability_rating (OK): 1 (required 1)
- new_security_rating (OK): 1 (required 1)
- new_maintainability_rating (OK): 1 (required 1)
- new_coverage (ERROR): 0.0 (required 80)
- new_duplicated_lines_density (OK): 0.0 (required 3)

[View Full Report on SonarQube](https://sonarqube.pm4.init-lab.ch/dashboard?id=StudyConnect)
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-04T16:50:06Z
body: **Backend SonarQube Analysis Results** (Branch Scan)

*   **Quality Gate Status:** `ERROR`

*   **Conditions:**
    - new_reliability_rating (OK): 1 (required 1)
- new_security_rating (OK): 1 (required 1)
- new_maintainability_rating (OK): 1 (required 1)
- new_coverage (ERROR): 0.0 (required 80)
- new_duplicated_lines_density (OK): 0.0 (required 3)

[View Full Report on SonarQube](https://sonarqube.pm4.init-lab.ch/dashboard?id=StudyConnect)
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-04T18:40:13Z
body: **Backend SonarQube Analysis Results** (Branch Scan)

*   **Quality Gate Status:** `ERROR`

*   **Conditions:**
    - new_reliability_rating (OK): 1 (required 1)
- new_security_rating (OK): 1 (required 1)
- new_maintainability_rating (OK): 1 (required 1)
- new_coverage (ERROR): 0.0 (required 80)
- new_duplicated_lines_density (OK): 0.0 (required 3)

[View Full Report on SonarQube](https://sonarqube.pm4.init-lab.ch/dashboard?id=StudyConnect)
author_association: NONE