<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Spring Boot | Guillermo F. Parra</title><link>https://guillermo.parralopez.com/tags/spring-boot/</link><atom:link href="https://guillermo.parralopez.com/tags/spring-boot/index.xml" rel="self" type="application/rss+xml"/><description>Spring Boot</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Fri, 01 May 2026 00:00:00 +0000</lastBuildDate><image><url>https://guillermo.parralopez.com/media/icon_hu_c22ca16efde0ca17.png</url><title>Spring Boot</title><link>https://guillermo.parralopez.com/tags/spring-boot/</link></image><item><title>Collaborative Boards (Trello Clone)</title><link>https://guillermo.parralopez.com/projects/taskmanager/</link><pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate><guid>https://guillermo.parralopez.com/projects/taskmanager/</guid><description>&lt;h3 id="description"&gt;Description&lt;/h3&gt;
&lt;p&gt;Project for collaborative work management using boards and tasks. The system organizes work through cards flowing across customizable lists, ensuring data persistence and pure domain-driven design.&lt;/p&gt;
&lt;h3 id="core-features"&gt;Core Features&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Board Management&lt;/strong&gt;: Creation of boards associated with an email address (the system&amp;rsquo;s primary identity).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lists and Workflow&lt;/strong&gt;: Creation of task lists (columns) within boards.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rich Cards&lt;/strong&gt;: Support for simple task cards and checklists (verification items).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Classification and Completion&lt;/strong&gt;: Use of tags (name and color) to identify cards and ability to automatically send them to a designated &amp;ldquo;Completed&amp;rdquo; list.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Traceability&lt;/strong&gt;: Board history log recording all card events and movements.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Board Control&lt;/strong&gt;: Temporary board locking by the owner (preventing new card/list creation while allowing movement of existing ones).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="implemented-optional-features-77"&gt;Implemented Optional Features (7/7)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;List-level Rules&lt;/strong&gt;: Restriction of maximum card capacity (maxCards) per column.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visual Filtering&lt;/strong&gt;: GUI tool to instantly filter cards by tag name or color.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;YAML Templates&lt;/strong&gt;: Preconfigured base board loading system dynamically from &lt;code&gt;.yaml&lt;/code&gt; files.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic Compaction&lt;/strong&gt;: Scheduled background task (&lt;code&gt;@Scheduled&lt;/code&gt;) for automated board maintenance and cleanup.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Passwordless Authentication&lt;/strong&gt;: Secure access system via temporary code sent by email (valid for 5 minutes), protected by REST Interceptors.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Permissions Management&lt;/strong&gt;: Board owners can invite other users via email, granting granular READ or WRITE roles, as well as revoking access.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automation Rules&lt;/strong&gt;: Custom user rule engine (&amp;ldquo;If event X occurs -&amp;gt; do Y&amp;rdquo;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="architecture--design-ddd"&gt;Architecture &amp;amp; Design (DDD)&lt;/h3&gt;
&lt;p&gt;The project abandons traditional MVC in favor of &lt;strong&gt;Hexagonal Architecture (Ports and Adapters)&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Domain at the Core&lt;/strong&gt;: Rich entities protecting their invariants.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aggregate Roots&lt;/strong&gt;: &lt;code&gt;Board&lt;/code&gt; (manages lists, history, permissions, and automations) and &lt;code&gt;Card&lt;/code&gt; (manages checklists and tags).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Value Objects&lt;/strong&gt;: Immutable identifiers such as &lt;code&gt;BoardId&lt;/code&gt;, &lt;code&gt;CardId&lt;/code&gt;, &lt;code&gt;ListId&lt;/code&gt;, and &lt;code&gt;Email&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Technical Isolation&lt;/strong&gt;: Repositories and external services communicate with the domain exclusively through Ports (Interfaces). Persistence (H2 + JPA) resides in the Infrastructure layer as an Output Adapter.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UI Protection&lt;/strong&gt;: The desktop interface (JavaFX) acts as an Input Adapter interacting via REST Endpoints using DTOs and immutable Command Objects.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="software-testing--quality"&gt;Software Testing &amp;amp; Quality&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unit Tests&lt;/strong&gt;: Domain behavior and isolated use cases verified using Mockito and JUnit 5.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integration Tests&lt;/strong&gt;: Full validation of REST adapters, JPA repositories, and security flows using MockMvc with in-memory databases.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Architectural Testing&lt;/strong&gt;: Intensive use of ArchUnit to guarantee that no infrastructure class breaches the domain.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="installation--execution"&gt;Installation &amp;amp; Execution&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Technical Requirements&lt;/strong&gt;: Java JDK 21, Maven 3.8+.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloning and Running&lt;/strong&gt;:
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone &lt;span class="o"&gt;[&lt;/span&gt;https://github.com/GuillermoPL/PDS-25-26.git&lt;span class="o"&gt;](&lt;/span&gt;https://github.com/GuillermoPL/PDS-25-26.git&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; PDS-25-26
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mvn clean install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>