<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jpatel42</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jpatel42"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Jpatel42"/>
	<updated>2026-08-08T09:43:20Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2541._Refactor_Student_Teams_Functionality&amp;diff=164957</id>
		<title>CSC/ECE 517 Spring 2025 - E2541. Refactor Student Teams Functionality</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2541._Refactor_Student_Teams_Functionality&amp;diff=164957"/>
		<updated>2025-04-23T01:27:46Z</updated>

		<summary type="html">&lt;p&gt;Jpatel42: /* 7. Testing Strategy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2025 – Refactor Student Teams Functionality =&lt;br /&gt;
&lt;br /&gt;
== Team Members ==  &lt;br /&gt;
* '''James Patel'''&lt;br /&gt;
* '''Sweekar Burji''' &lt;br /&gt;
* '''Isaac Taylor''' &lt;br /&gt;
&lt;br /&gt;
== 1. Expertiza Overview ==  &lt;br /&gt;
Expertiza is a modular peer‑review and assignment management platform. Core modules:  &lt;br /&gt;
* '''Assignments''': creation, distribution, deadlines  &lt;br /&gt;
* '''Reviews''': peer‑review workflows, rubric configuration  &lt;br /&gt;
* '''Teams''': student grouping and collaboration  &lt;br /&gt;
* '''Feedback &amp;amp; Grading''': role‑based score/comment interfaces  &lt;br /&gt;
Role‑based access controls define permissions for instructors, TAs, and students, ensuring secure, fine‑grained data access.&lt;br /&gt;
&lt;br /&gt;
== 2. Project Overview ==  &lt;br /&gt;
Refactor the **Student Teams** feature to:  &lt;br /&gt;
# Improve maintainability  &lt;br /&gt;
# Clarify domain concepts  &lt;br /&gt;
# Enforce precise, assignment‑specific membership mappings  &lt;br /&gt;
Align data model and business logic with a clear “Participant” abstraction, reducing complexity and eliminating duplication.&lt;br /&gt;
&lt;br /&gt;
== 3. Problem Statement ==  &lt;br /&gt;
Legacy implementation issues:  &lt;br /&gt;
* ''Generic Mapping Table'': `teams_users` simply relates `user_id` ↔ `team_id`, allowing cross‑assignment memberships without context.  &lt;br /&gt;
* ''Ambiguous Naming &amp;amp; Raw SQL'': unclear model relationships drive developers to bypass ActiveRecord, raising security and maintainability concerns.  &lt;br /&gt;
* ''Testing Gaps &amp;amp; Duplication'': sparse specs around membership logic; duplicated code in controllers and models increases risk of regressions.&lt;br /&gt;
&lt;br /&gt;
== 4. Design Goals &amp;amp; Objectives ==  &lt;br /&gt;
# '''Domain Clarity'''  &lt;br /&gt;
## Rename `teams_users` → `teams_participants`  &lt;br /&gt;
## Replace `user_id` with `participant_id` to tie membership to a `Participant` record  &lt;br /&gt;
# '''Data Integrity'''  &lt;br /&gt;
## Add DB constraints: FKs to `participants` &amp;amp; `teams`; unique index on `[:participant_id, :team_id]`  &lt;br /&gt;
## Enforce presence and uniqueness via ActiveRecord validations  &lt;br /&gt;
# '''Code Quality &amp;amp; Maintainability'''  &lt;br /&gt;
## Extract membership logic into `TeamsParticipant` model &amp;amp; new `TeamsParticipantsController`  &lt;br /&gt;
## Apply Single Responsibility Principle—controllers for HTTP, models for business rules  &lt;br /&gt;
# '''Testing &amp;amp; Verification'''  &lt;br /&gt;
## Expand RSpec coverage to ≥ 90% for refactored components  &lt;br /&gt;
## Consolidate logic (e.g., `get_team_members`, `add_member_to_invited_team`) on `TeamsParticipant`  &lt;br /&gt;
# '''Success Metrics'''  &lt;br /&gt;
* Test coverage ↑ (SimpleCov)  &lt;br /&gt;
* Cyclomatic complexity ↓ (CodeClimate)  &lt;br /&gt;
* No CodeQL warnings&lt;br /&gt;
&lt;br /&gt;
== 5. System Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
=== 5.1 Data Flow (MVC Pattern) ===  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ Models ] → [ Controllers ] → [ Views ]&lt;br /&gt;
      ↑                ↓&lt;br /&gt;
  ActiveRecord     HTTP responses &amp;amp; redirects&lt;br /&gt;
  validations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.2 Entity‑Relationship Diagram (ASCII) ===  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+-------------+      +-------------------+      +-------------+&lt;br /&gt;
| Participant |1----*| TeamsParticipant  |*----1|     Team    |&lt;br /&gt;
+-------------+      +-------------------+      +-------------+&lt;br /&gt;
      (id)            (participant_id)           (id, name,…)&lt;br /&gt;
                       (team_id)&lt;br /&gt;
                       (duty_id)&lt;br /&gt;
                       (status)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.3 Schema Changes (Rails Migrations) ===  &lt;br /&gt;
; Rename table  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
rename_table :teams_users, :teams_participants&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Add participant FK  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
add_column :teams_participants, :participant_id, :bigint, null: false&lt;br /&gt;
add_foreign_key :teams_participants, :participants&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Remove old column  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
remove_column :teams_participants, :user_id&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Unique index  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
add_index :teams_participants, [:participant_id, :team_id], unique: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Detailed Component Design ==&lt;br /&gt;
&lt;br /&gt;
=== 6.1 Models ===&lt;br /&gt;
&lt;br /&gt;
==== TeamsParticipant ====  &lt;br /&gt;
* '''Attributes''': `team_id`, `participant_id`, `duty_id` (optional), `pair_programming_status`  &lt;br /&gt;
* '''Associations''':  &lt;br /&gt;
** `belongs_to :team`  &lt;br /&gt;
** `belongs_to :participant`  &lt;br /&gt;
** `belongs_to :duty, optional: true`  &lt;br /&gt;
* '''Validations''':  &lt;br /&gt;
** presence of `team_id` and `participant_id`  &lt;br /&gt;
** uniqueness of `participant_id` scoped to `team_id`  &lt;br /&gt;
* '''Class Methods''':  &lt;br /&gt;
** `.team_empty?(team_id)`  &lt;br /&gt;
** `.add_member_to_invited_team(token, participant_id)`  &lt;br /&gt;
** `.get_team_members(team_id)`  &lt;br /&gt;
** `.get_teams_for_participant(participant_id)`&lt;br /&gt;
&lt;br /&gt;
==== Participant ====  &lt;br /&gt;
* Rename association `team_user` → `teams_participant`  &lt;br /&gt;
* Update `has_many :teams_participants`, adjust dependent destroy logic&lt;br /&gt;
&lt;br /&gt;
=== 6.2 Controllers ===&lt;br /&gt;
&lt;br /&gt;
==== TeamsParticipantsController ====  &lt;br /&gt;
* '''Actions''': `index`, `new`, `create`, `destroy`, `destroy_selected`, `update_duties`  &lt;br /&gt;
* '''Responsibilities''':  &lt;br /&gt;
** Handle membership lifecycle (create, delete, bulk remove, duty update)  &lt;br /&gt;
** Strong params: permit only `:participant_id`, `:team_id`, duty fields  &lt;br /&gt;
** Render HTML or JSON with appropriate flash/redirects&lt;br /&gt;
&lt;br /&gt;
==== JoinTeamRequestsController ====  &lt;br /&gt;
* Refactored to use `TeamsParticipant` for listing requests and popups  &lt;br /&gt;
* Simplified business logic—no raw SQL, uses ActiveRecord scopes&lt;br /&gt;
&lt;br /&gt;
=== 6.3 Views (UI) ===  &lt;br /&gt;
* Replace `user.name` with `participant.full_name` in student teams pages  &lt;br /&gt;
* Render duty assignment via partial `_duty_form.html.erb`  &lt;br /&gt;
* Include before/after screenshots in documentation to illustrate updates&lt;br /&gt;
&lt;br /&gt;
== 7. Testing Strategy ==&lt;br /&gt;
&lt;br /&gt;
=== 7.1 Unit Testing (RSpec Model Specs) ===  &lt;br /&gt;
* **TeamsParticipant**: test associations, validations, and class methods&lt;br /&gt;
&lt;br /&gt;
=== 7.2 Controller Testing ===  &lt;br /&gt;
* **TeamsParticipantsController**: verify HTTP codes, redirects, flash messages, and error handling&lt;br /&gt;
&lt;br /&gt;
=== 7.3 Integration &amp;amp; System Testing ===  &lt;br /&gt;
* **Capybara System Specs**: workflows for team creation, invitations, duty assignment, member removal; UI assertions  &lt;br /&gt;
&lt;br /&gt;
=== 7.4 Fixtures &amp;amp; Factories ===  &lt;br /&gt;
* Update `FactoryBot` definitions: replace `:user_team` with `:teams_participant`  &lt;br /&gt;
* Use shared contexts for assignments, participants, and teams&lt;br /&gt;
&lt;br /&gt;
[[File:OODD 1st image.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
== 8. Design Rationale &amp;amp; Impact ==  &lt;br /&gt;
* '''Single Responsibility''': clear separation of concerns between controllers and models  &lt;br /&gt;
* '''Domain Alignment''': “participant” abstraction captures assignment context  &lt;br /&gt;
* '''Security &amp;amp; Quality''': ActiveRecord replaces raw SQL; CodeQL scans pass cleanly  &lt;br /&gt;
* '''Maintainability''': centralized logic enables easier future enhancements  &lt;br /&gt;
* '''Risks &amp;amp; Mitigations''':  &lt;br /&gt;
** Migration complexity → write reversible migrations, schedule maintenance window  &lt;br /&gt;
** Data integrity → pre‑validate existing records before enforcing constraints&lt;br /&gt;
&lt;br /&gt;
== 9. References ==  &lt;br /&gt;
* '''Migration Script''': `db/migrate/20240319000001_rename_teams_users_to_teams_participants.rb`  &lt;br /&gt;
* '''CodeQL Workflow''': `.github/workflows/codeql.yml`  &lt;br /&gt;
* '''Expertiza Wiki''': System design and refactor guidelines  &lt;br /&gt;
* '''RSpec Coverage Reports''': `coverage/index.html`&lt;/div&gt;</summary>
		<author><name>Jpatel42</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:OODD_1st_image.png&amp;diff=164954</id>
		<title>File:OODD 1st image.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:OODD_1st_image.png&amp;diff=164954"/>
		<updated>2025-04-23T01:26:48Z</updated>

		<summary type="html">&lt;p&gt;Jpatel42: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jpatel42</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2541._Refactor_Student_Teams_Functionality&amp;diff=164942</id>
		<title>CSC/ECE 517 Spring 2025 - E2541. Refactor Student Teams Functionality</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2541._Refactor_Student_Teams_Functionality&amp;diff=164942"/>
		<updated>2025-04-23T01:19:53Z</updated>

		<summary type="html">&lt;p&gt;Jpatel42: /* 7. Testing Strategy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2025 – Refactor Student Teams Functionality =&lt;br /&gt;
&lt;br /&gt;
== Team Members ==  &lt;br /&gt;
* '''James Patel'''&lt;br /&gt;
* '''Sweekar Burji''' &lt;br /&gt;
* '''Isaac Taylor''' &lt;br /&gt;
&lt;br /&gt;
== 1. Expertiza Overview ==  &lt;br /&gt;
Expertiza is a modular peer‑review and assignment management platform. Core modules:  &lt;br /&gt;
* '''Assignments''': creation, distribution, deadlines  &lt;br /&gt;
* '''Reviews''': peer‑review workflows, rubric configuration  &lt;br /&gt;
* '''Teams''': student grouping and collaboration  &lt;br /&gt;
* '''Feedback &amp;amp; Grading''': role‑based score/comment interfaces  &lt;br /&gt;
Role‑based access controls define permissions for instructors, TAs, and students, ensuring secure, fine‑grained data access.&lt;br /&gt;
&lt;br /&gt;
== 2. Project Overview ==  &lt;br /&gt;
Refactor the **Student Teams** feature to:  &lt;br /&gt;
# Improve maintainability  &lt;br /&gt;
# Clarify domain concepts  &lt;br /&gt;
# Enforce precise, assignment‑specific membership mappings  &lt;br /&gt;
Align data model and business logic with a clear “Participant” abstraction, reducing complexity and eliminating duplication.&lt;br /&gt;
&lt;br /&gt;
== 3. Problem Statement ==  &lt;br /&gt;
Legacy implementation issues:  &lt;br /&gt;
* ''Generic Mapping Table'': `teams_users` simply relates `user_id` ↔ `team_id`, allowing cross‑assignment memberships without context.  &lt;br /&gt;
* ''Ambiguous Naming &amp;amp; Raw SQL'': unclear model relationships drive developers to bypass ActiveRecord, raising security and maintainability concerns.  &lt;br /&gt;
* ''Testing Gaps &amp;amp; Duplication'': sparse specs around membership logic; duplicated code in controllers and models increases risk of regressions.&lt;br /&gt;
&lt;br /&gt;
== 4. Design Goals &amp;amp; Objectives ==  &lt;br /&gt;
# '''Domain Clarity'''  &lt;br /&gt;
## Rename `teams_users` → `teams_participants`  &lt;br /&gt;
## Replace `user_id` with `participant_id` to tie membership to a `Participant` record  &lt;br /&gt;
# '''Data Integrity'''  &lt;br /&gt;
## Add DB constraints: FKs to `participants` &amp;amp; `teams`; unique index on `[:participant_id, :team_id]`  &lt;br /&gt;
## Enforce presence and uniqueness via ActiveRecord validations  &lt;br /&gt;
# '''Code Quality &amp;amp; Maintainability'''  &lt;br /&gt;
## Extract membership logic into `TeamsParticipant` model &amp;amp; new `TeamsParticipantsController`  &lt;br /&gt;
## Apply Single Responsibility Principle—controllers for HTTP, models for business rules  &lt;br /&gt;
# '''Testing &amp;amp; Verification'''  &lt;br /&gt;
## Expand RSpec coverage to ≥ 90% for refactored components  &lt;br /&gt;
## Consolidate logic (e.g., `get_team_members`, `add_member_to_invited_team`) on `TeamsParticipant`  &lt;br /&gt;
# '''Success Metrics'''  &lt;br /&gt;
* Test coverage ↑ (SimpleCov)  &lt;br /&gt;
* Cyclomatic complexity ↓ (CodeClimate)  &lt;br /&gt;
* No CodeQL warnings&lt;br /&gt;
&lt;br /&gt;
== 5. System Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
=== 5.1 Data Flow (MVC Pattern) ===  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ Models ] → [ Controllers ] → [ Views ]&lt;br /&gt;
      ↑                ↓&lt;br /&gt;
  ActiveRecord     HTTP responses &amp;amp; redirects&lt;br /&gt;
  validations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.2 Entity‑Relationship Diagram (ASCII) ===  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+-------------+      +-------------------+      +-------------+&lt;br /&gt;
| Participant |1----*| TeamsParticipant  |*----1|     Team    |&lt;br /&gt;
+-------------+      +-------------------+      +-------------+&lt;br /&gt;
      (id)            (participant_id)           (id, name,…)&lt;br /&gt;
                       (team_id)&lt;br /&gt;
                       (duty_id)&lt;br /&gt;
                       (status)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.3 Schema Changes (Rails Migrations) ===  &lt;br /&gt;
; Rename table  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
rename_table :teams_users, :teams_participants&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Add participant FK  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
add_column :teams_participants, :participant_id, :bigint, null: false&lt;br /&gt;
add_foreign_key :teams_participants, :participants&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Remove old column  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
remove_column :teams_participants, :user_id&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Unique index  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
add_index :teams_participants, [:participant_id, :team_id], unique: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Detailed Component Design ==&lt;br /&gt;
&lt;br /&gt;
=== 6.1 Models ===&lt;br /&gt;
&lt;br /&gt;
==== TeamsParticipant ====  &lt;br /&gt;
* '''Attributes''': `team_id`, `participant_id`, `duty_id` (optional), `pair_programming_status`  &lt;br /&gt;
* '''Associations''':  &lt;br /&gt;
** `belongs_to :team`  &lt;br /&gt;
** `belongs_to :participant`  &lt;br /&gt;
** `belongs_to :duty, optional: true`  &lt;br /&gt;
* '''Validations''':  &lt;br /&gt;
** presence of `team_id` and `participant_id`  &lt;br /&gt;
** uniqueness of `participant_id` scoped to `team_id`  &lt;br /&gt;
* '''Class Methods''':  &lt;br /&gt;
** `.team_empty?(team_id)`  &lt;br /&gt;
** `.add_member_to_invited_team(token, participant_id)`  &lt;br /&gt;
** `.get_team_members(team_id)`  &lt;br /&gt;
** `.get_teams_for_participant(participant_id)`&lt;br /&gt;
&lt;br /&gt;
==== Participant ====  &lt;br /&gt;
* Rename association `team_user` → `teams_participant`  &lt;br /&gt;
* Update `has_many :teams_participants`, adjust dependent destroy logic&lt;br /&gt;
&lt;br /&gt;
=== 6.2 Controllers ===&lt;br /&gt;
&lt;br /&gt;
==== TeamsParticipantsController ====  &lt;br /&gt;
* '''Actions''': `index`, `new`, `create`, `destroy`, `destroy_selected`, `update_duties`  &lt;br /&gt;
* '''Responsibilities''':  &lt;br /&gt;
** Handle membership lifecycle (create, delete, bulk remove, duty update)  &lt;br /&gt;
** Strong params: permit only `:participant_id`, `:team_id`, duty fields  &lt;br /&gt;
** Render HTML or JSON with appropriate flash/redirects&lt;br /&gt;
&lt;br /&gt;
==== JoinTeamRequestsController ====  &lt;br /&gt;
* Refactored to use `TeamsParticipant` for listing requests and popups  &lt;br /&gt;
* Simplified business logic—no raw SQL, uses ActiveRecord scopes&lt;br /&gt;
&lt;br /&gt;
=== 6.3 Views (UI) ===  &lt;br /&gt;
* Replace `user.name` with `participant.full_name` in student teams pages  &lt;br /&gt;
* Render duty assignment via partial `_duty_form.html.erb`  &lt;br /&gt;
* Include before/after screenshots in documentation to illustrate updates&lt;br /&gt;
&lt;br /&gt;
== 7. Testing Strategy ==&lt;br /&gt;
&lt;br /&gt;
=== 7.1 Unit Testing (RSpec Model Specs) ===  &lt;br /&gt;
* **TeamsParticipant**: test associations, validations, and class methods&lt;br /&gt;
&lt;br /&gt;
=== 7.2 Controller Testing ===  &lt;br /&gt;
* **TeamsParticipantsController**: verify HTTP codes, redirects, flash messages, and error handling&lt;br /&gt;
&lt;br /&gt;
=== 7.3 Integration &amp;amp; System Testing ===  &lt;br /&gt;
* **Capybara System Specs**: workflows for team creation, invitations, duty assignment, member removal; UI assertions  &lt;br /&gt;
&lt;br /&gt;
=== 7.4 Fixtures &amp;amp; Factories ===  &lt;br /&gt;
* Update `FactoryBot` definitions: replace `:user_team` with `:teams_participant`  &lt;br /&gt;
* Use shared contexts for assignments, participants, and teams&lt;br /&gt;
&lt;br /&gt;
[[File:|900px|center]]&lt;br /&gt;
&lt;br /&gt;
== 8. Design Rationale &amp;amp; Impact ==  &lt;br /&gt;
* '''Single Responsibility''': clear separation of concerns between controllers and models  &lt;br /&gt;
* '''Domain Alignment''': “participant” abstraction captures assignment context  &lt;br /&gt;
* '''Security &amp;amp; Quality''': ActiveRecord replaces raw SQL; CodeQL scans pass cleanly  &lt;br /&gt;
* '''Maintainability''': centralized logic enables easier future enhancements  &lt;br /&gt;
* '''Risks &amp;amp; Mitigations''':  &lt;br /&gt;
** Migration complexity → write reversible migrations, schedule maintenance window  &lt;br /&gt;
** Data integrity → pre‑validate existing records before enforcing constraints&lt;br /&gt;
&lt;br /&gt;
== 9. References ==  &lt;br /&gt;
* '''Migration Script''': `db/migrate/20240319000001_rename_teams_users_to_teams_participants.rb`  &lt;br /&gt;
* '''CodeQL Workflow''': `.github/workflows/codeql.yml`  &lt;br /&gt;
* '''Expertiza Wiki''': System design and refactor guidelines  &lt;br /&gt;
* '''RSpec Coverage Reports''': `coverage/index.html`&lt;/div&gt;</summary>
		<author><name>Jpatel42</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2541._Refactor_Student_Teams_Functionality&amp;diff=164939</id>
		<title>CSC/ECE 517 Spring 2025 - E2541. Refactor Student Teams Functionality</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2541._Refactor_Student_Teams_Functionality&amp;diff=164939"/>
		<updated>2025-04-23T01:19:22Z</updated>

		<summary type="html">&lt;p&gt;Jpatel42: /* 7. Testing Strategy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2025 – Refactor Student Teams Functionality =&lt;br /&gt;
&lt;br /&gt;
== Team Members ==  &lt;br /&gt;
* '''James Patel'''&lt;br /&gt;
* '''Sweekar Burji''' &lt;br /&gt;
* '''Isaac Taylor''' &lt;br /&gt;
&lt;br /&gt;
== 1. Expertiza Overview ==  &lt;br /&gt;
Expertiza is a modular peer‑review and assignment management platform. Core modules:  &lt;br /&gt;
* '''Assignments''': creation, distribution, deadlines  &lt;br /&gt;
* '''Reviews''': peer‑review workflows, rubric configuration  &lt;br /&gt;
* '''Teams''': student grouping and collaboration  &lt;br /&gt;
* '''Feedback &amp;amp; Grading''': role‑based score/comment interfaces  &lt;br /&gt;
Role‑based access controls define permissions for instructors, TAs, and students, ensuring secure, fine‑grained data access.&lt;br /&gt;
&lt;br /&gt;
== 2. Project Overview ==  &lt;br /&gt;
Refactor the **Student Teams** feature to:  &lt;br /&gt;
# Improve maintainability  &lt;br /&gt;
# Clarify domain concepts  &lt;br /&gt;
# Enforce precise, assignment‑specific membership mappings  &lt;br /&gt;
Align data model and business logic with a clear “Participant” abstraction, reducing complexity and eliminating duplication.&lt;br /&gt;
&lt;br /&gt;
== 3. Problem Statement ==  &lt;br /&gt;
Legacy implementation issues:  &lt;br /&gt;
* ''Generic Mapping Table'': `teams_users` simply relates `user_id` ↔ `team_id`, allowing cross‑assignment memberships without context.  &lt;br /&gt;
* ''Ambiguous Naming &amp;amp; Raw SQL'': unclear model relationships drive developers to bypass ActiveRecord, raising security and maintainability concerns.  &lt;br /&gt;
* ''Testing Gaps &amp;amp; Duplication'': sparse specs around membership logic; duplicated code in controllers and models increases risk of regressions.&lt;br /&gt;
&lt;br /&gt;
== 4. Design Goals &amp;amp; Objectives ==  &lt;br /&gt;
# '''Domain Clarity'''  &lt;br /&gt;
## Rename `teams_users` → `teams_participants`  &lt;br /&gt;
## Replace `user_id` with `participant_id` to tie membership to a `Participant` record  &lt;br /&gt;
# '''Data Integrity'''  &lt;br /&gt;
## Add DB constraints: FKs to `participants` &amp;amp; `teams`; unique index on `[:participant_id, :team_id]`  &lt;br /&gt;
## Enforce presence and uniqueness via ActiveRecord validations  &lt;br /&gt;
# '''Code Quality &amp;amp; Maintainability'''  &lt;br /&gt;
## Extract membership logic into `TeamsParticipant` model &amp;amp; new `TeamsParticipantsController`  &lt;br /&gt;
## Apply Single Responsibility Principle—controllers for HTTP, models for business rules  &lt;br /&gt;
# '''Testing &amp;amp; Verification'''  &lt;br /&gt;
## Expand RSpec coverage to ≥ 90% for refactored components  &lt;br /&gt;
## Consolidate logic (e.g., `get_team_members`, `add_member_to_invited_team`) on `TeamsParticipant`  &lt;br /&gt;
# '''Success Metrics'''  &lt;br /&gt;
* Test coverage ↑ (SimpleCov)  &lt;br /&gt;
* Cyclomatic complexity ↓ (CodeClimate)  &lt;br /&gt;
* No CodeQL warnings&lt;br /&gt;
&lt;br /&gt;
== 5. System Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
=== 5.1 Data Flow (MVC Pattern) ===  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ Models ] → [ Controllers ] → [ Views ]&lt;br /&gt;
      ↑                ↓&lt;br /&gt;
  ActiveRecord     HTTP responses &amp;amp; redirects&lt;br /&gt;
  validations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.2 Entity‑Relationship Diagram (ASCII) ===  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+-------------+      +-------------------+      +-------------+&lt;br /&gt;
| Participant |1----*| TeamsParticipant  |*----1|     Team    |&lt;br /&gt;
+-------------+      +-------------------+      +-------------+&lt;br /&gt;
      (id)            (participant_id)           (id, name,…)&lt;br /&gt;
                       (team_id)&lt;br /&gt;
                       (duty_id)&lt;br /&gt;
                       (status)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.3 Schema Changes (Rails Migrations) ===  &lt;br /&gt;
; Rename table  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
rename_table :teams_users, :teams_participants&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Add participant FK  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
add_column :teams_participants, :participant_id, :bigint, null: false&lt;br /&gt;
add_foreign_key :teams_participants, :participants&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Remove old column  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
remove_column :teams_participants, :user_id&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Unique index  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
add_index :teams_participants, [:participant_id, :team_id], unique: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Detailed Component Design ==&lt;br /&gt;
&lt;br /&gt;
=== 6.1 Models ===&lt;br /&gt;
&lt;br /&gt;
==== TeamsParticipant ====  &lt;br /&gt;
* '''Attributes''': `team_id`, `participant_id`, `duty_id` (optional), `pair_programming_status`  &lt;br /&gt;
* '''Associations''':  &lt;br /&gt;
** `belongs_to :team`  &lt;br /&gt;
** `belongs_to :participant`  &lt;br /&gt;
** `belongs_to :duty, optional: true`  &lt;br /&gt;
* '''Validations''':  &lt;br /&gt;
** presence of `team_id` and `participant_id`  &lt;br /&gt;
** uniqueness of `participant_id` scoped to `team_id`  &lt;br /&gt;
* '''Class Methods''':  &lt;br /&gt;
** `.team_empty?(team_id)`  &lt;br /&gt;
** `.add_member_to_invited_team(token, participant_id)`  &lt;br /&gt;
** `.get_team_members(team_id)`  &lt;br /&gt;
** `.get_teams_for_participant(participant_id)`&lt;br /&gt;
&lt;br /&gt;
==== Participant ====  &lt;br /&gt;
* Rename association `team_user` → `teams_participant`  &lt;br /&gt;
* Update `has_many :teams_participants`, adjust dependent destroy logic&lt;br /&gt;
&lt;br /&gt;
=== 6.2 Controllers ===&lt;br /&gt;
&lt;br /&gt;
==== TeamsParticipantsController ====  &lt;br /&gt;
* '''Actions''': `index`, `new`, `create`, `destroy`, `destroy_selected`, `update_duties`  &lt;br /&gt;
* '''Responsibilities''':  &lt;br /&gt;
** Handle membership lifecycle (create, delete, bulk remove, duty update)  &lt;br /&gt;
** Strong params: permit only `:participant_id`, `:team_id`, duty fields  &lt;br /&gt;
** Render HTML or JSON with appropriate flash/redirects&lt;br /&gt;
&lt;br /&gt;
==== JoinTeamRequestsController ====  &lt;br /&gt;
* Refactored to use `TeamsParticipant` for listing requests and popups  &lt;br /&gt;
* Simplified business logic—no raw SQL, uses ActiveRecord scopes&lt;br /&gt;
&lt;br /&gt;
=== 6.3 Views (UI) ===  &lt;br /&gt;
* Replace `user.name` with `participant.full_name` in student teams pages  &lt;br /&gt;
* Render duty assignment via partial `_duty_form.html.erb`  &lt;br /&gt;
* Include before/after screenshots in documentation to illustrate updates&lt;br /&gt;
&lt;br /&gt;
== 7. Testing Strategy ==&lt;br /&gt;
&lt;br /&gt;
=== 7.1 Unit Testing (RSpec Model Specs) ===  &lt;br /&gt;
* **TeamsParticipant**: test associations, validations, and class methods&lt;br /&gt;
&lt;br /&gt;
=== 7.2 Controller Testing ===  &lt;br /&gt;
* **TeamsParticipantsController**: verify HTTP codes, redirects, flash messages, and error handling&lt;br /&gt;
&lt;br /&gt;
=== 7.3 Integration &amp;amp; System Testing ===  &lt;br /&gt;
* **Capybara System Specs**: workflows for team creation, invitations, duty assignment, member removal; UI assertions  &lt;br /&gt;
&lt;br /&gt;
=== 7.4 Fixtures &amp;amp; Factories ===  &lt;br /&gt;
* Update `FactoryBot` definitions: replace `:user_team` with `:teams_participant`  &lt;br /&gt;
* Use shared contexts for assignments, participants, and teams&lt;br /&gt;
&lt;br /&gt;
[[File:UI-1.png|900px|center]]&lt;br /&gt;
&lt;br /&gt;
== 8. Design Rationale &amp;amp; Impact ==  &lt;br /&gt;
* '''Single Responsibility''': clear separation of concerns between controllers and models  &lt;br /&gt;
* '''Domain Alignment''': “participant” abstraction captures assignment context  &lt;br /&gt;
* '''Security &amp;amp; Quality''': ActiveRecord replaces raw SQL; CodeQL scans pass cleanly  &lt;br /&gt;
* '''Maintainability''': centralized logic enables easier future enhancements  &lt;br /&gt;
* '''Risks &amp;amp; Mitigations''':  &lt;br /&gt;
** Migration complexity → write reversible migrations, schedule maintenance window  &lt;br /&gt;
** Data integrity → pre‑validate existing records before enforcing constraints&lt;br /&gt;
&lt;br /&gt;
== 9. References ==  &lt;br /&gt;
* '''Migration Script''': `db/migrate/20240319000001_rename_teams_users_to_teams_participants.rb`  &lt;br /&gt;
* '''CodeQL Workflow''': `.github/workflows/codeql.yml`  &lt;br /&gt;
* '''Expertiza Wiki''': System design and refactor guidelines  &lt;br /&gt;
* '''RSpec Coverage Reports''': `coverage/index.html`&lt;/div&gt;</summary>
		<author><name>Jpatel42</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2541._Refactor_Student_Teams_Functionality&amp;diff=164869</id>
		<title>CSC/ECE 517 Spring 2025 - E2541. Refactor Student Teams Functionality</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2541._Refactor_Student_Teams_Functionality&amp;diff=164869"/>
		<updated>2025-04-23T00:30:44Z</updated>

		<summary type="html">&lt;p&gt;Jpatel42: Created page with &amp;quot;= CSC/ECE 517 Spring 2025 – Refactor Student Teams Functionality =  == Team Members ==   * '''James Patel''' * '''Sweekar Burji'''  * '''Isaac Taylor'''   == 1. Expertiza Overview ==   Expertiza is a modular peer‑review and assignment management platform. Core modules:   * '''Assignments''': creation, distribution, deadlines   * '''Reviews''': peer‑review workflows, rubric configuration   * '''Teams''': student grouping and collaboration   * '''Feedback &amp;amp; ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2025 – Refactor Student Teams Functionality =&lt;br /&gt;
&lt;br /&gt;
== Team Members ==  &lt;br /&gt;
* '''James Patel'''&lt;br /&gt;
* '''Sweekar Burji''' &lt;br /&gt;
* '''Isaac Taylor''' &lt;br /&gt;
&lt;br /&gt;
== 1. Expertiza Overview ==  &lt;br /&gt;
Expertiza is a modular peer‑review and assignment management platform. Core modules:  &lt;br /&gt;
* '''Assignments''': creation, distribution, deadlines  &lt;br /&gt;
* '''Reviews''': peer‑review workflows, rubric configuration  &lt;br /&gt;
* '''Teams''': student grouping and collaboration  &lt;br /&gt;
* '''Feedback &amp;amp; Grading''': role‑based score/comment interfaces  &lt;br /&gt;
Role‑based access controls define permissions for instructors, TAs, and students, ensuring secure, fine‑grained data access.&lt;br /&gt;
&lt;br /&gt;
== 2. Project Overview ==  &lt;br /&gt;
Refactor the **Student Teams** feature to:  &lt;br /&gt;
# Improve maintainability  &lt;br /&gt;
# Clarify domain concepts  &lt;br /&gt;
# Enforce precise, assignment‑specific membership mappings  &lt;br /&gt;
Align data model and business logic with a clear “Participant” abstraction, reducing complexity and eliminating duplication.&lt;br /&gt;
&lt;br /&gt;
== 3. Problem Statement ==  &lt;br /&gt;
Legacy implementation issues:  &lt;br /&gt;
* ''Generic Mapping Table'': `teams_users` simply relates `user_id` ↔ `team_id`, allowing cross‑assignment memberships without context.  &lt;br /&gt;
* ''Ambiguous Naming &amp;amp; Raw SQL'': unclear model relationships drive developers to bypass ActiveRecord, raising security and maintainability concerns.  &lt;br /&gt;
* ''Testing Gaps &amp;amp; Duplication'': sparse specs around membership logic; duplicated code in controllers and models increases risk of regressions.&lt;br /&gt;
&lt;br /&gt;
== 4. Design Goals &amp;amp; Objectives ==  &lt;br /&gt;
# '''Domain Clarity'''  &lt;br /&gt;
## Rename `teams_users` → `teams_participants`  &lt;br /&gt;
## Replace `user_id` with `participant_id` to tie membership to a `Participant` record  &lt;br /&gt;
# '''Data Integrity'''  &lt;br /&gt;
## Add DB constraints: FKs to `participants` &amp;amp; `teams`; unique index on `[:participant_id, :team_id]`  &lt;br /&gt;
## Enforce presence and uniqueness via ActiveRecord validations  &lt;br /&gt;
# '''Code Quality &amp;amp; Maintainability'''  &lt;br /&gt;
## Extract membership logic into `TeamsParticipant` model &amp;amp; new `TeamsParticipantsController`  &lt;br /&gt;
## Apply Single Responsibility Principle—controllers for HTTP, models for business rules  &lt;br /&gt;
# '''Testing &amp;amp; Verification'''  &lt;br /&gt;
## Expand RSpec coverage to ≥ 90% for refactored components  &lt;br /&gt;
## Consolidate logic (e.g., `get_team_members`, `add_member_to_invited_team`) on `TeamsParticipant`  &lt;br /&gt;
# '''Success Metrics'''  &lt;br /&gt;
* Test coverage ↑ (SimpleCov)  &lt;br /&gt;
* Cyclomatic complexity ↓ (CodeClimate)  &lt;br /&gt;
* No CodeQL warnings&lt;br /&gt;
&lt;br /&gt;
== 5. System Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
=== 5.1 Data Flow (MVC Pattern) ===  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ Models ] → [ Controllers ] → [ Views ]&lt;br /&gt;
      ↑                ↓&lt;br /&gt;
  ActiveRecord     HTTP responses &amp;amp; redirects&lt;br /&gt;
  validations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.2 Entity‑Relationship Diagram (ASCII) ===  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+-------------+      +-------------------+      +-------------+&lt;br /&gt;
| Participant |1----*| TeamsParticipant  |*----1|     Team    |&lt;br /&gt;
+-------------+      +-------------------+      +-------------+&lt;br /&gt;
      (id)            (participant_id)           (id, name,…)&lt;br /&gt;
                       (team_id)&lt;br /&gt;
                       (duty_id)&lt;br /&gt;
                       (status)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.3 Schema Changes (Rails Migrations) ===  &lt;br /&gt;
; Rename table  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
rename_table :teams_users, :teams_participants&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Add participant FK  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
add_column :teams_participants, :participant_id, :bigint, null: false&lt;br /&gt;
add_foreign_key :teams_participants, :participants&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Remove old column  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
remove_column :teams_participants, :user_id&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Unique index  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
add_index :teams_participants, [:participant_id, :team_id], unique: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Detailed Component Design ==&lt;br /&gt;
&lt;br /&gt;
=== 6.1 Models ===&lt;br /&gt;
&lt;br /&gt;
==== TeamsParticipant ====  &lt;br /&gt;
* '''Attributes''': `team_id`, `participant_id`, `duty_id` (optional), `pair_programming_status`  &lt;br /&gt;
* '''Associations''':  &lt;br /&gt;
** `belongs_to :team`  &lt;br /&gt;
** `belongs_to :participant`  &lt;br /&gt;
** `belongs_to :duty, optional: true`  &lt;br /&gt;
* '''Validations''':  &lt;br /&gt;
** presence of `team_id` and `participant_id`  &lt;br /&gt;
** uniqueness of `participant_id` scoped to `team_id`  &lt;br /&gt;
* '''Class Methods''':  &lt;br /&gt;
** `.team_empty?(team_id)`  &lt;br /&gt;
** `.add_member_to_invited_team(token, participant_id)`  &lt;br /&gt;
** `.get_team_members(team_id)`  &lt;br /&gt;
** `.get_teams_for_participant(participant_id)`&lt;br /&gt;
&lt;br /&gt;
==== Participant ====  &lt;br /&gt;
* Rename association `team_user` → `teams_participant`  &lt;br /&gt;
* Update `has_many :teams_participants`, adjust dependent destroy logic&lt;br /&gt;
&lt;br /&gt;
=== 6.2 Controllers ===&lt;br /&gt;
&lt;br /&gt;
==== TeamsParticipantsController ====  &lt;br /&gt;
* '''Actions''': `index`, `new`, `create`, `destroy`, `destroy_selected`, `update_duties`  &lt;br /&gt;
* '''Responsibilities''':  &lt;br /&gt;
** Handle membership lifecycle (create, delete, bulk remove, duty update)  &lt;br /&gt;
** Strong params: permit only `:participant_id`, `:team_id`, duty fields  &lt;br /&gt;
** Render HTML or JSON with appropriate flash/redirects&lt;br /&gt;
&lt;br /&gt;
==== JoinTeamRequestsController ====  &lt;br /&gt;
* Refactored to use `TeamsParticipant` for listing requests and popups  &lt;br /&gt;
* Simplified business logic—no raw SQL, uses ActiveRecord scopes&lt;br /&gt;
&lt;br /&gt;
=== 6.3 Views (UI) ===  &lt;br /&gt;
* Replace `user.name` with `participant.full_name` in student teams pages  &lt;br /&gt;
* Render duty assignment via partial `_duty_form.html.erb`  &lt;br /&gt;
* Include before/after screenshots in documentation to illustrate updates&lt;br /&gt;
&lt;br /&gt;
== 7. Testing Strategy ==&lt;br /&gt;
&lt;br /&gt;
=== 7.1 Unit Testing (RSpec Model Specs) ===  &lt;br /&gt;
* **TeamsParticipant**: test associations, validations, and class methods&lt;br /&gt;
&lt;br /&gt;
=== 7.2 Controller Testing ===  &lt;br /&gt;
* **TeamsParticipantsController**: verify HTTP codes, redirects, flash messages, and error handling&lt;br /&gt;
&lt;br /&gt;
=== 7.3 Integration &amp;amp; System Testing ===  &lt;br /&gt;
* **Capybara System Specs**: workflows for team creation, invitations, duty assignment, member removal; UI assertions  &lt;br /&gt;
&lt;br /&gt;
=== 7.4 Fixtures &amp;amp; Factories ===  &lt;br /&gt;
* Update `FactoryBot` definitions: replace `:user_team` with `:teams_participant`  &lt;br /&gt;
* Use shared contexts for assignments, participants, and teams&lt;br /&gt;
&lt;br /&gt;
== 8. Design Rationale &amp;amp; Impact ==  &lt;br /&gt;
* '''Single Responsibility''': clear separation of concerns between controllers and models  &lt;br /&gt;
* '''Domain Alignment''': “participant” abstraction captures assignment context  &lt;br /&gt;
* '''Security &amp;amp; Quality''': ActiveRecord replaces raw SQL; CodeQL scans pass cleanly  &lt;br /&gt;
* '''Maintainability''': centralized logic enables easier future enhancements  &lt;br /&gt;
* '''Risks &amp;amp; Mitigations''':  &lt;br /&gt;
** Migration complexity → write reversible migrations, schedule maintenance window  &lt;br /&gt;
** Data integrity → pre‑validate existing records before enforcing constraints&lt;br /&gt;
&lt;br /&gt;
== 9. References ==  &lt;br /&gt;
* '''Migration Script''': `db/migrate/20240319000001_rename_teams_users_to_teams_participants.rb`  &lt;br /&gt;
* '''CodeQL Workflow''': `.github/workflows/codeql.yml`  &lt;br /&gt;
* '''Expertiza Wiki''': System design and refactor guidelines  &lt;br /&gt;
* '''RSpec Coverage Reports''': `coverage/index.html`&lt;/div&gt;</summary>
		<author><name>Jpatel42</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025&amp;diff=164868</id>
		<title>CSC/ECE 517 Spring 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025&amp;diff=164868"/>
		<updated>2025-04-23T00:29:58Z</updated>

		<summary type="html">&lt;p&gt;Jpatel42: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Spring 2025 - E2503. Refactor the Team hierarchy]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2504. Mentor-meeting management]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2505. Testing Answer Tagging]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2508. Reimplement bidding-algorithm web service]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2509. Reimplement feedback_response_map.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2519. Implement view for results of bidding]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2522. Enhancing UI Consistency in Expertiza 1]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2520. Reimplement heatgrid UI for reviews]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2517. Reimplement internationalization (frontend + backend)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2523: Enhancing UI Consistency in Expertiza 2]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2515:  Reimplement student_teams_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2501:  Refactor review_mapping_helper.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2502:  Refactor review_mapping_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2512. Reimplement responses controller]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2510. Reimplement grades_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2507. Reimplement back end for submission records]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2514. Reimplement student_quizzes_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2518. Reimplement password resets (frontend + backend)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2516. Reimplement teams_users_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2511. Reimplement participants_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2521. UI for View submissions/assign grades (except heatgrid)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2513. Reimplement sign_up_topic.rb as project_topic.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2506. Implement testing for new Bookmarks Controller]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Final Projects ==&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2509 Refactoring and Enhancing the Feedback Response Map Controller]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2539 Reimplement Student Task View (Frontend + Backend)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2521 UI for View submissions/assign grades (except heatgrid)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2524 Reimplement student review controller]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2525 Reimplement review_mapping_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2526 Reimplement Teams and Participant hierarchies]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2530 Reimplement Grades Controller (Frontend + Backend)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2534 UI for Assign Reviewers]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2540 Integration of Assignment participant Frontend with participant controller Backend]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2532. Reimplement Missing ResponseMap Subclasses]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2542. Refactor review_bids_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2533. ​​Reimplement the Team hierarchy]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2531 Refactor participants_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2528 Testing for Survey Deployment]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2514. Reimplement student_quizzes_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2516. Reimplement teams_users_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2535 Reimplement User Profile Management (Frontend + Backend)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2536. Improve assessment360 controller]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2527. Mentor-meeting management: assignments with topics]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2506. Merging UI for View Assignments in Courses]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2529. Testing for the Questionnaire Helper in Expertiza]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2541. Refactor Student Teams Functionality]]&lt;/div&gt;</summary>
		<author><name>Jpatel42</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2500._Refactor_Student_Teams_Functionality&amp;diff=164867</id>
		<title>CSC/ECE 517 Spring 2025 - E2500. Refactor Student Teams Functionality</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2500._Refactor_Student_Teams_Functionality&amp;diff=164867"/>
		<updated>2025-04-23T00:28:37Z</updated>

		<summary type="html">&lt;p&gt;Jpatel42: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= CSC/ECE 517 Spring 2025 – Refactor Student Teams Functionality =&lt;br /&gt;
&lt;br /&gt;
== Team Members ==  &lt;br /&gt;
* '''James Patel'''&lt;br /&gt;
* '''Sweekar Burji''' &lt;br /&gt;
* '''Isaac Taylor''' &lt;br /&gt;
&lt;br /&gt;
== 1. Expertiza Overview ==  &lt;br /&gt;
Expertiza is a modular peer‑review and assignment management platform. Core modules:  &lt;br /&gt;
* '''Assignments''': creation, distribution, deadlines  &lt;br /&gt;
* '''Reviews''': peer‑review workflows, rubric configuration  &lt;br /&gt;
* '''Teams''': student grouping and collaboration  &lt;br /&gt;
* '''Feedback &amp;amp; Grading''': role‑based score/comment interfaces  &lt;br /&gt;
Role‑based access controls define permissions for instructors, TAs, and students, ensuring secure, fine‑grained data access.&lt;br /&gt;
&lt;br /&gt;
== 2. Project Overview ==  &lt;br /&gt;
Refactor the **Student Teams** feature to:  &lt;br /&gt;
# Improve maintainability  &lt;br /&gt;
# Clarify domain concepts  &lt;br /&gt;
# Enforce precise, assignment‑specific membership mappings  &lt;br /&gt;
Align data model and business logic with a clear “Participant” abstraction, reducing complexity and eliminating duplication.&lt;br /&gt;
&lt;br /&gt;
== 3. Problem Statement ==  &lt;br /&gt;
Legacy implementation issues:  &lt;br /&gt;
* ''Generic Mapping Table'': `teams_users` simply relates `user_id` ↔ `team_id`, allowing cross‑assignment memberships without context.  &lt;br /&gt;
* ''Ambiguous Naming &amp;amp; Raw SQL'': unclear model relationships drive developers to bypass ActiveRecord, raising security and maintainability concerns.  &lt;br /&gt;
* ''Testing Gaps &amp;amp; Duplication'': sparse specs around membership logic; duplicated code in controllers and models increases risk of regressions.&lt;br /&gt;
&lt;br /&gt;
== 4. Design Goals &amp;amp; Objectives ==  &lt;br /&gt;
# '''Domain Clarity'''  &lt;br /&gt;
## Rename `teams_users` → `teams_participants`  &lt;br /&gt;
## Replace `user_id` with `participant_id` to tie membership to a `Participant` record  &lt;br /&gt;
# '''Data Integrity'''  &lt;br /&gt;
## Add DB constraints: FKs to `participants` &amp;amp; `teams`; unique index on `[:participant_id, :team_id]`  &lt;br /&gt;
## Enforce presence and uniqueness via ActiveRecord validations  &lt;br /&gt;
# '''Code Quality &amp;amp; Maintainability'''  &lt;br /&gt;
## Extract membership logic into `TeamsParticipant` model &amp;amp; new `TeamsParticipantsController`  &lt;br /&gt;
## Apply Single Responsibility Principle—controllers for HTTP, models for business rules  &lt;br /&gt;
# '''Testing &amp;amp; Verification'''  &lt;br /&gt;
## Expand RSpec coverage to ≥ 90% for refactored components  &lt;br /&gt;
## Consolidate logic (e.g., `get_team_members`, `add_member_to_invited_team`) on `TeamsParticipant`  &lt;br /&gt;
# '''Success Metrics'''  &lt;br /&gt;
* Test coverage ↑ (SimpleCov)  &lt;br /&gt;
* Cyclomatic complexity ↓ (CodeClimate)  &lt;br /&gt;
* No CodeQL warnings&lt;br /&gt;
&lt;br /&gt;
== 5. System Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
=== 5.1 Data Flow (MVC Pattern) ===  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[ Models ] → [ Controllers ] → [ Views ]&lt;br /&gt;
      ↑                ↓&lt;br /&gt;
  ActiveRecord     HTTP responses &amp;amp; redirects&lt;br /&gt;
  validations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.2 Entity‑Relationship Diagram (ASCII) ===  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+-------------+      +-------------------+      +-------------+&lt;br /&gt;
| Participant |1----*| TeamsParticipant  |*----1|     Team    |&lt;br /&gt;
+-------------+      +-------------------+      +-------------+&lt;br /&gt;
      (id)            (participant_id)           (id, name,…)&lt;br /&gt;
                       (team_id)&lt;br /&gt;
                       (duty_id)&lt;br /&gt;
                       (status)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5.3 Schema Changes (Rails Migrations) ===  &lt;br /&gt;
; Rename table  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
rename_table :teams_users, :teams_participants&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Add participant FK  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
add_column :teams_participants, :participant_id, :bigint, null: false&lt;br /&gt;
add_foreign_key :teams_participants, :participants&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Remove old column  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
remove_column :teams_participants, :user_id&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
; Unique index  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
add_index :teams_participants, [:participant_id, :team_id], unique: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Detailed Component Design ==&lt;br /&gt;
&lt;br /&gt;
=== 6.1 Models ===&lt;br /&gt;
&lt;br /&gt;
==== TeamsParticipant ====  &lt;br /&gt;
* '''Attributes''': `team_id`, `participant_id`, `duty_id` (optional), `pair_programming_status`  &lt;br /&gt;
* '''Associations''':  &lt;br /&gt;
** `belongs_to :team`  &lt;br /&gt;
** `belongs_to :participant`  &lt;br /&gt;
** `belongs_to :duty, optional: true`  &lt;br /&gt;
* '''Validations''':  &lt;br /&gt;
** presence of `team_id` and `participant_id`  &lt;br /&gt;
** uniqueness of `participant_id` scoped to `team_id`  &lt;br /&gt;
* '''Class Methods''':  &lt;br /&gt;
** `.team_empty?(team_id)`  &lt;br /&gt;
** `.add_member_to_invited_team(token, participant_id)`  &lt;br /&gt;
** `.get_team_members(team_id)`  &lt;br /&gt;
** `.get_teams_for_participant(participant_id)`&lt;br /&gt;
&lt;br /&gt;
==== Participant ====  &lt;br /&gt;
* Rename association `team_user` → `teams_participant`  &lt;br /&gt;
* Update `has_many :teams_participants`, adjust dependent destroy logic&lt;br /&gt;
&lt;br /&gt;
=== 6.2 Controllers ===&lt;br /&gt;
&lt;br /&gt;
==== TeamsParticipantsController ====  &lt;br /&gt;
* '''Actions''': `index`, `new`, `create`, `destroy`, `destroy_selected`, `update_duties`  &lt;br /&gt;
* '''Responsibilities''':  &lt;br /&gt;
** Handle membership lifecycle (create, delete, bulk remove, duty update)  &lt;br /&gt;
** Strong params: permit only `:participant_id`, `:team_id`, duty fields  &lt;br /&gt;
** Render HTML or JSON with appropriate flash/redirects&lt;br /&gt;
&lt;br /&gt;
==== JoinTeamRequestsController ====  &lt;br /&gt;
* Refactored to use `TeamsParticipant` for listing requests and popups  &lt;br /&gt;
* Simplified business logic—no raw SQL, uses ActiveRecord scopes&lt;br /&gt;
&lt;br /&gt;
=== 6.3 Views (UI) ===  &lt;br /&gt;
* Replace `user.name` with `participant.full_name` in student teams pages  &lt;br /&gt;
* Render duty assignment via partial `_duty_form.html.erb`  &lt;br /&gt;
* Include before/after screenshots in documentation to illustrate updates&lt;br /&gt;
&lt;br /&gt;
== 7. Testing Strategy ==&lt;br /&gt;
&lt;br /&gt;
=== 7.1 Unit Testing (RSpec Model Specs) ===  &lt;br /&gt;
* **TeamsParticipant**: test associations, validations, and class methods&lt;br /&gt;
&lt;br /&gt;
=== 7.2 Controller Testing ===  &lt;br /&gt;
* **TeamsParticipantsController**: verify HTTP codes, redirects, flash messages, and error handling&lt;br /&gt;
&lt;br /&gt;
=== 7.3 Integration &amp;amp; System Testing ===  &lt;br /&gt;
* **Capybara System Specs**: workflows for team creation, invitations, duty assignment, member removal; UI assertions  &lt;br /&gt;
&lt;br /&gt;
=== 7.4 Fixtures &amp;amp; Factories ===  &lt;br /&gt;
* Update `FactoryBot` definitions: replace `:user_team` with `:teams_participant`  &lt;br /&gt;
* Use shared contexts for assignments, participants, and teams&lt;br /&gt;
&lt;br /&gt;
== 8. Design Rationale &amp;amp; Impact ==  &lt;br /&gt;
* '''Single Responsibility''': clear separation of concerns between controllers and models  &lt;br /&gt;
* '''Domain Alignment''': “participant” abstraction captures assignment context  &lt;br /&gt;
* '''Security &amp;amp; Quality''': ActiveRecord replaces raw SQL; CodeQL scans pass cleanly  &lt;br /&gt;
* '''Maintainability''': centralized logic enables easier future enhancements  &lt;br /&gt;
* '''Risks &amp;amp; Mitigations''':  &lt;br /&gt;
** Migration complexity → write reversible migrations, schedule maintenance window  &lt;br /&gt;
** Data integrity → pre‑validate existing records before enforcing constraints&lt;br /&gt;
&lt;br /&gt;
== 9. References ==  &lt;br /&gt;
* '''Migration Script''': `db/migrate/20240319000001_rename_teams_users_to_teams_participants.rb`  &lt;br /&gt;
* '''CodeQL Workflow''': `.github/workflows/codeql.yml`  &lt;br /&gt;
* '''Expertiza Wiki''': System design and refactor guidelines  &lt;br /&gt;
* '''RSpec Coverage Reports''': `coverage/index.html`&lt;/div&gt;</summary>
		<author><name>Jpatel42</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2500._Refactor_Student_Teams_Functionality&amp;diff=163884</id>
		<title>CSC/ECE 517 Spring 2025 - E2500. Refactor Student Teams Functionality</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2500._Refactor_Student_Teams_Functionality&amp;diff=163884"/>
		<updated>2025-04-08T17:55:21Z</updated>

		<summary type="html">&lt;p&gt;Jpatel42: /* Team */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Expertiza Background==&lt;br /&gt;
Expertiza is a Ruby on Rails-based open-source platform developed at NC State University, designed to enhance the management of assignment submissions, peer reviews, and team-based collaboration. It is actively maintained and improved by students and staff, enabling rich pedagogical workflows through features like topic selection, automated and manual review assignment, and team functionality.&lt;br /&gt;
&lt;br /&gt;
==Student Teams Functionality Refactor==&lt;br /&gt;
This initiative (E2500) targets the core mechanism by which student team memberships are handled in Expertiza. The motivation was to resolve ambiguity and reduce technical debt by shifting from a global user-based team model to a participant-centric model, better aligning with the domain logic of assignment-specific participation.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The current implementation uses the teams_users table to associate teams with users globally. However, this design fails to recognize that a student may enroll in multiple assignments, each with potentially different team affiliations. This misalignment complicates membership validation, reduces data integrity, and introduces ambiguity across the system.&lt;br /&gt;
&lt;br /&gt;
Additional issues:&lt;br /&gt;
&lt;br /&gt;
Business logic is embedded in controllers, violating separation of concerns.&lt;br /&gt;
&lt;br /&gt;
Models like SignedUpTeam use raw SQL queries, reducing readability and increasing maintenance risk.&lt;br /&gt;
&lt;br /&gt;
Lack of validation and redundant logic inflate technical debt.&lt;br /&gt;
&lt;br /&gt;
==Refactor Goals==&lt;br /&gt;
&lt;br /&gt;
Align the data model with a participant-centric architecture.&lt;br /&gt;
&lt;br /&gt;
Create a new TeamsParticipants model and controller.&lt;br /&gt;
&lt;br /&gt;
Remove redundant fields and logic (e.g., user_id in team membership).&lt;br /&gt;
&lt;br /&gt;
Improve clarity, maintainability, and adherence to MVC best practices.&lt;br /&gt;
&lt;br /&gt;
Enhance the views to support edge cases and provide cleaner UX.&lt;br /&gt;
&lt;br /&gt;
Expand test coverage to ensure system integrity post-refactor.&lt;br /&gt;
&lt;br /&gt;
==Design &amp;amp; Implementation==&lt;br /&gt;
&lt;br /&gt;
===Schema Migration===&lt;br /&gt;
We introduced a migration that:&lt;br /&gt;
&lt;br /&gt;
Renames teams_users to teams_participants.&lt;br /&gt;
&lt;br /&gt;
Replaces user_id with participant_id, enforcing assignment specificity.&lt;br /&gt;
&lt;br /&gt;
Removes redundant fields and adds proper indexing for data integrity.&lt;br /&gt;
&lt;br /&gt;
#comment - Insert migration file code snippet here&lt;br /&gt;
&lt;br /&gt;
===TeamsParticipant Model===&lt;br /&gt;
A new model TeamsParticipant was introduced to manage the many-to-many relationship between teams and assignment-specific participants.&lt;br /&gt;
&lt;br /&gt;
#comment - Insert code block for TeamsParticipant model&lt;br /&gt;
&lt;br /&gt;
Key Features:&lt;br /&gt;
&lt;br /&gt;
belongs_to :team&lt;br /&gt;
&lt;br /&gt;
belongs_to :participant&lt;br /&gt;
&lt;br /&gt;
Validations for presence and uniqueness of associations&lt;br /&gt;
&lt;br /&gt;
Centralized logic for managing team membership&lt;br /&gt;
&lt;br /&gt;
===TeamsParticipantsController===&lt;br /&gt;
This new controller handles adding and removing participants from teams. By isolating this logic, we simplify the primary TeamsController and adhere more closely to Rails conventions.&lt;br /&gt;
&lt;br /&gt;
#comment - Insert code block for TeamsParticipantsController#create method&lt;br /&gt;
&lt;br /&gt;
Highlights:&lt;br /&gt;
&lt;br /&gt;
Validates participant existence before adding to a team&lt;br /&gt;
&lt;br /&gt;
Uses flash messaging for user feedback&lt;br /&gt;
&lt;br /&gt;
Prevents duplicate entries through model-level validations&lt;br /&gt;
&lt;br /&gt;
===View Layer Enhancements===&lt;br /&gt;
The front-end views were updated to:&lt;br /&gt;
&lt;br /&gt;
Display team members using participant names, not user IDs&lt;br /&gt;
&lt;br /&gt;
Handle nil values gracefully to avoid unexpected crashes&lt;br /&gt;
&lt;br /&gt;
Provide meaningful error messages and user feedback&lt;br /&gt;
&lt;br /&gt;
Present team layouts in a cleaner, more intuitive format&lt;br /&gt;
&lt;br /&gt;
#comment - Add screenshots or HTML.erb snippets showing before/after of team views&lt;br /&gt;
&lt;br /&gt;
==Testing Strategy==&lt;br /&gt;
&lt;br /&gt;
===Unit Testing===&lt;br /&gt;
&lt;br /&gt;
Model-level tests ensure associations, validations, and constraints in TeamsParticipant.&lt;br /&gt;
&lt;br /&gt;
Prevents duplicate memberships.&lt;br /&gt;
&lt;br /&gt;
Verifies foreign key constraints (e.g., participant must exist).&lt;br /&gt;
&lt;br /&gt;
===Controller Testing===&lt;br /&gt;
&lt;br /&gt;
Tests for create/destroy actions in TeamsParticipantsController.&lt;br /&gt;
&lt;br /&gt;
Simulate valid and invalid inputs.&lt;br /&gt;
&lt;br /&gt;
Confirm redirection behavior and error message accuracy.&lt;br /&gt;
&lt;br /&gt;
===Integration Testing===&lt;br /&gt;
&lt;br /&gt;
Create full user workflows from team creation to submission.&lt;br /&gt;
&lt;br /&gt;
Use Capybara and feature specs for form submission, error state, and redirection flow.&lt;br /&gt;
&lt;br /&gt;
#comment - Insert RSpec test case examples for TeamsParticipant and controller&lt;br /&gt;
&lt;br /&gt;
===RSpec Summary=== All tests have been run with RSpec across models, controllers, and features. Integration is monitored using GitHub Actions for CI/CD. The system passed all tests post-refactor, with added coverage for new components.&lt;br /&gt;
&lt;br /&gt;
#comment - Add RSpec test result screenshot&lt;br /&gt;
&lt;br /&gt;
==AI-Assisted Refactoring==&lt;br /&gt;
We utilized Cursor IDE to accelerate the refactoring process. Its semantic code search and context-aware suggestions helped:&lt;br /&gt;
&lt;br /&gt;
Refactor large controller methods into smaller ones.&lt;br /&gt;
&lt;br /&gt;
Identify redundant logic and recommend method extractions.&lt;br /&gt;
&lt;br /&gt;
Improve variable naming for clarity.&lt;br /&gt;
&lt;br /&gt;
Safely reorganize models and controller responsibilities.&lt;br /&gt;
&lt;br /&gt;
Cursor’s assistance also ensured that refactored code aligned with principles from Clean Code and best practices in Rails development.&lt;br /&gt;
&lt;br /&gt;
==Design Principles Applied==&lt;br /&gt;
&lt;br /&gt;
Single Responsibility Principle (SRP)&lt;br /&gt;
&lt;br /&gt;
Don’t Repeat Yourself (DRY)&lt;br /&gt;
&lt;br /&gt;
Separation of Concerns (SoC)&lt;br /&gt;
&lt;br /&gt;
Consistent Error Handling&lt;br /&gt;
&lt;br /&gt;
Explicit Association Mapping&lt;br /&gt;
&lt;br /&gt;
Rails MVC Compliance&lt;br /&gt;
&lt;br /&gt;
==Implementation Impact==&lt;br /&gt;
The refactor delivered:&lt;br /&gt;
&lt;br /&gt;
Reduced ambiguity in team assignment logic.&lt;br /&gt;
&lt;br /&gt;
Improved scalability for supporting multiple assignments.&lt;br /&gt;
&lt;br /&gt;
Better maintainability and readability.&lt;br /&gt;
&lt;br /&gt;
Robust error messaging and input validation.&lt;br /&gt;
&lt;br /&gt;
Cleaner view rendering logic and fewer frontend crashes.&lt;br /&gt;
&lt;br /&gt;
==Final Code Overview==&lt;br /&gt;
&lt;br /&gt;
Teams and participants are now linked via TeamsParticipant, not TeamsUser.&lt;br /&gt;
&lt;br /&gt;
New controller separates membership responsibilities.&lt;br /&gt;
&lt;br /&gt;
Views updated to reflect new model structure.&lt;br /&gt;
&lt;br /&gt;
Comprehensive test coverage ensures resilience.&lt;br /&gt;
&lt;br /&gt;
No regression in functionality post-refactor.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
Expertiza GitHub Repository&lt;br /&gt;
&lt;br /&gt;
Ruby on Rails Guides&lt;br /&gt;
&lt;br /&gt;
RSpec Documentation&lt;br /&gt;
&lt;br /&gt;
Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin&lt;br /&gt;
&lt;br /&gt;
Cursor IDE (https://www.cursor.sh/)&lt;br /&gt;
&lt;br /&gt;
==Peer Review Notes==&lt;br /&gt;
This narrative document replaces the previous bullet-point-based design update. It is intended to provide a comprehensive explanation of both the implementation and reasoning behind our refactoring decisions. Reviewers are encouraged to evaluate the clarity of the design rationale, test completeness, and code modularity.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Sweekar Burji (sburji)&lt;br /&gt;
&lt;br /&gt;
James Patel (jpatel42)&lt;br /&gt;
&lt;br /&gt;
Isaac Taylor (itaylor)&lt;/div&gt;</summary>
		<author><name>Jpatel42</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2500._Refactor_Student_Teams_Functionality&amp;diff=163883</id>
		<title>CSC/ECE 517 Spring 2025 - E2500. Refactor Student Teams Functionality</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2500._Refactor_Student_Teams_Functionality&amp;diff=163883"/>
		<updated>2025-04-08T17:54:58Z</updated>

		<summary type="html">&lt;p&gt;Jpatel42: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Expertiza Background==&lt;br /&gt;
Expertiza is a Ruby on Rails-based open-source platform developed at NC State University, designed to enhance the management of assignment submissions, peer reviews, and team-based collaboration. It is actively maintained and improved by students and staff, enabling rich pedagogical workflows through features like topic selection, automated and manual review assignment, and team functionality.&lt;br /&gt;
&lt;br /&gt;
==Student Teams Functionality Refactor==&lt;br /&gt;
This initiative (E2500) targets the core mechanism by which student team memberships are handled in Expertiza. The motivation was to resolve ambiguity and reduce technical debt by shifting from a global user-based team model to a participant-centric model, better aligning with the domain logic of assignment-specific participation.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The current implementation uses the teams_users table to associate teams with users globally. However, this design fails to recognize that a student may enroll in multiple assignments, each with potentially different team affiliations. This misalignment complicates membership validation, reduces data integrity, and introduces ambiguity across the system.&lt;br /&gt;
&lt;br /&gt;
Additional issues:&lt;br /&gt;
&lt;br /&gt;
Business logic is embedded in controllers, violating separation of concerns.&lt;br /&gt;
&lt;br /&gt;
Models like SignedUpTeam use raw SQL queries, reducing readability and increasing maintenance risk.&lt;br /&gt;
&lt;br /&gt;
Lack of validation and redundant logic inflate technical debt.&lt;br /&gt;
&lt;br /&gt;
==Refactor Goals==&lt;br /&gt;
&lt;br /&gt;
Align the data model with a participant-centric architecture.&lt;br /&gt;
&lt;br /&gt;
Create a new TeamsParticipants model and controller.&lt;br /&gt;
&lt;br /&gt;
Remove redundant fields and logic (e.g., user_id in team membership).&lt;br /&gt;
&lt;br /&gt;
Improve clarity, maintainability, and adherence to MVC best practices.&lt;br /&gt;
&lt;br /&gt;
Enhance the views to support edge cases and provide cleaner UX.&lt;br /&gt;
&lt;br /&gt;
Expand test coverage to ensure system integrity post-refactor.&lt;br /&gt;
&lt;br /&gt;
==Design &amp;amp; Implementation==&lt;br /&gt;
&lt;br /&gt;
===Schema Migration===&lt;br /&gt;
We introduced a migration that:&lt;br /&gt;
&lt;br /&gt;
Renames teams_users to teams_participants.&lt;br /&gt;
&lt;br /&gt;
Replaces user_id with participant_id, enforcing assignment specificity.&lt;br /&gt;
&lt;br /&gt;
Removes redundant fields and adds proper indexing for data integrity.&lt;br /&gt;
&lt;br /&gt;
#comment - Insert migration file code snippet here&lt;br /&gt;
&lt;br /&gt;
===TeamsParticipant Model===&lt;br /&gt;
A new model TeamsParticipant was introduced to manage the many-to-many relationship between teams and assignment-specific participants.&lt;br /&gt;
&lt;br /&gt;
#comment - Insert code block for TeamsParticipant model&lt;br /&gt;
&lt;br /&gt;
Key Features:&lt;br /&gt;
&lt;br /&gt;
belongs_to :team&lt;br /&gt;
&lt;br /&gt;
belongs_to :participant&lt;br /&gt;
&lt;br /&gt;
Validations for presence and uniqueness of associations&lt;br /&gt;
&lt;br /&gt;
Centralized logic for managing team membership&lt;br /&gt;
&lt;br /&gt;
===TeamsParticipantsController===&lt;br /&gt;
This new controller handles adding and removing participants from teams. By isolating this logic, we simplify the primary TeamsController and adhere more closely to Rails conventions.&lt;br /&gt;
&lt;br /&gt;
#comment - Insert code block for TeamsParticipantsController#create method&lt;br /&gt;
&lt;br /&gt;
Highlights:&lt;br /&gt;
&lt;br /&gt;
Validates participant existence before adding to a team&lt;br /&gt;
&lt;br /&gt;
Uses flash messaging for user feedback&lt;br /&gt;
&lt;br /&gt;
Prevents duplicate entries through model-level validations&lt;br /&gt;
&lt;br /&gt;
===View Layer Enhancements===&lt;br /&gt;
The front-end views were updated to:&lt;br /&gt;
&lt;br /&gt;
Display team members using participant names, not user IDs&lt;br /&gt;
&lt;br /&gt;
Handle nil values gracefully to avoid unexpected crashes&lt;br /&gt;
&lt;br /&gt;
Provide meaningful error messages and user feedback&lt;br /&gt;
&lt;br /&gt;
Present team layouts in a cleaner, more intuitive format&lt;br /&gt;
&lt;br /&gt;
#comment - Add screenshots or HTML.erb snippets showing before/after of team views&lt;br /&gt;
&lt;br /&gt;
==Testing Strategy==&lt;br /&gt;
&lt;br /&gt;
===Unit Testing===&lt;br /&gt;
&lt;br /&gt;
Model-level tests ensure associations, validations, and constraints in TeamsParticipant.&lt;br /&gt;
&lt;br /&gt;
Prevents duplicate memberships.&lt;br /&gt;
&lt;br /&gt;
Verifies foreign key constraints (e.g., participant must exist).&lt;br /&gt;
&lt;br /&gt;
===Controller Testing===&lt;br /&gt;
&lt;br /&gt;
Tests for create/destroy actions in TeamsParticipantsController.&lt;br /&gt;
&lt;br /&gt;
Simulate valid and invalid inputs.&lt;br /&gt;
&lt;br /&gt;
Confirm redirection behavior and error message accuracy.&lt;br /&gt;
&lt;br /&gt;
===Integration Testing===&lt;br /&gt;
&lt;br /&gt;
Create full user workflows from team creation to submission.&lt;br /&gt;
&lt;br /&gt;
Use Capybara and feature specs for form submission, error state, and redirection flow.&lt;br /&gt;
&lt;br /&gt;
#comment - Insert RSpec test case examples for TeamsParticipant and controller&lt;br /&gt;
&lt;br /&gt;
===RSpec Summary=== All tests have been run with RSpec across models, controllers, and features. Integration is monitored using GitHub Actions for CI/CD. The system passed all tests post-refactor, with added coverage for new components.&lt;br /&gt;
&lt;br /&gt;
#comment - Add RSpec test result screenshot&lt;br /&gt;
&lt;br /&gt;
==AI-Assisted Refactoring==&lt;br /&gt;
We utilized Cursor IDE to accelerate the refactoring process. Its semantic code search and context-aware suggestions helped:&lt;br /&gt;
&lt;br /&gt;
Refactor large controller methods into smaller ones.&lt;br /&gt;
&lt;br /&gt;
Identify redundant logic and recommend method extractions.&lt;br /&gt;
&lt;br /&gt;
Improve variable naming for clarity.&lt;br /&gt;
&lt;br /&gt;
Safely reorganize models and controller responsibilities.&lt;br /&gt;
&lt;br /&gt;
Cursor’s assistance also ensured that refactored code aligned with principles from Clean Code and best practices in Rails development.&lt;br /&gt;
&lt;br /&gt;
==Design Principles Applied==&lt;br /&gt;
&lt;br /&gt;
Single Responsibility Principle (SRP)&lt;br /&gt;
&lt;br /&gt;
Don’t Repeat Yourself (DRY)&lt;br /&gt;
&lt;br /&gt;
Separation of Concerns (SoC)&lt;br /&gt;
&lt;br /&gt;
Consistent Error Handling&lt;br /&gt;
&lt;br /&gt;
Explicit Association Mapping&lt;br /&gt;
&lt;br /&gt;
Rails MVC Compliance&lt;br /&gt;
&lt;br /&gt;
==Implementation Impact==&lt;br /&gt;
The refactor delivered:&lt;br /&gt;
&lt;br /&gt;
Reduced ambiguity in team assignment logic.&lt;br /&gt;
&lt;br /&gt;
Improved scalability for supporting multiple assignments.&lt;br /&gt;
&lt;br /&gt;
Better maintainability and readability.&lt;br /&gt;
&lt;br /&gt;
Robust error messaging and input validation.&lt;br /&gt;
&lt;br /&gt;
Cleaner view rendering logic and fewer frontend crashes.&lt;br /&gt;
&lt;br /&gt;
==Final Code Overview==&lt;br /&gt;
&lt;br /&gt;
Teams and participants are now linked via TeamsParticipant, not TeamsUser.&lt;br /&gt;
&lt;br /&gt;
New controller separates membership responsibilities.&lt;br /&gt;
&lt;br /&gt;
Views updated to reflect new model structure.&lt;br /&gt;
&lt;br /&gt;
Comprehensive test coverage ensures resilience.&lt;br /&gt;
&lt;br /&gt;
No regression in functionality post-refactor.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
Expertiza GitHub Repository&lt;br /&gt;
&lt;br /&gt;
Ruby on Rails Guides&lt;br /&gt;
&lt;br /&gt;
RSpec Documentation&lt;br /&gt;
&lt;br /&gt;
Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin&lt;br /&gt;
&lt;br /&gt;
Cursor IDE (https://www.cursor.sh/)&lt;br /&gt;
&lt;br /&gt;
==Peer Review Notes==&lt;br /&gt;
This narrative document replaces the previous bullet-point-based design update. It is intended to provide a comprehensive explanation of both the implementation and reasoning behind our refactoring decisions. Reviewers are encouraged to evaluate the clarity of the design rationale, test completeness, and code modularity.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Sweekar Burji (sburji).&lt;br /&gt;
&lt;br /&gt;
James Patel (jpatel42).&lt;br /&gt;
&lt;br /&gt;
Isaac Taylor (itaylor).&lt;/div&gt;</summary>
		<author><name>Jpatel42</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2500._Refactor_Student_Teams_Functionality&amp;diff=163882</id>
		<title>CSC/ECE 517 Spring 2025 - E2500. Refactor Student Teams Functionality</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2500._Refactor_Student_Teams_Functionality&amp;diff=163882"/>
		<updated>2025-04-08T17:54:25Z</updated>

		<summary type="html">&lt;p&gt;Jpatel42: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Expertiza Background==&lt;br /&gt;
Expertiza is a Ruby on Rails-based open-source platform developed at NC State University, designed to enhance the management of assignment submissions, peer reviews, and team-based collaboration. It is actively maintained and improved by students and staff, enabling rich pedagogical workflows through features like topic selection, automated and manual review assignment, and team functionality.&lt;br /&gt;
&lt;br /&gt;
==Student Teams Functionality Refactor==&lt;br /&gt;
This initiative (E2500) targets the core mechanism by which student team memberships are handled in Expertiza. The motivation was to resolve ambiguity and reduce technical debt by shifting from a global user-based team model to a participant-centric model, better aligning with the domain logic of assignment-specific participation.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The current implementation uses the teams_users table to associate teams with users globally. However, this design fails to recognize that a student may enroll in multiple assignments, each with potentially different team affiliations. This misalignment complicates membership validation, reduces data integrity, and introduces ambiguity across the system.&lt;br /&gt;
&lt;br /&gt;
Additional issues:&lt;br /&gt;
&lt;br /&gt;
Business logic is embedded in controllers, violating separation of concerns.&lt;br /&gt;
&lt;br /&gt;
Models like SignedUpTeam use raw SQL queries, reducing readability and increasing maintenance risk.&lt;br /&gt;
&lt;br /&gt;
Lack of validation and redundant logic inflate technical debt.&lt;br /&gt;
&lt;br /&gt;
==Refactor Goals==&lt;br /&gt;
&lt;br /&gt;
Align the data model with a participant-centric architecture.&lt;br /&gt;
&lt;br /&gt;
Create a new TeamsParticipants model and controller.&lt;br /&gt;
&lt;br /&gt;
Remove redundant fields and logic (e.g., user_id in team membership).&lt;br /&gt;
&lt;br /&gt;
Improve clarity, maintainability, and adherence to MVC best practices.&lt;br /&gt;
&lt;br /&gt;
Enhance the views to support edge cases and provide cleaner UX.&lt;br /&gt;
&lt;br /&gt;
Expand test coverage to ensure system integrity post-refactor.&lt;br /&gt;
&lt;br /&gt;
==Design &amp;amp; Implementation==&lt;br /&gt;
&lt;br /&gt;
===Schema Migration===&lt;br /&gt;
We introduced a migration that:&lt;br /&gt;
&lt;br /&gt;
Renames teams_users to teams_participants.&lt;br /&gt;
&lt;br /&gt;
Replaces user_id with participant_id, enforcing assignment specificity.&lt;br /&gt;
&lt;br /&gt;
Removes redundant fields and adds proper indexing for data integrity.&lt;br /&gt;
&lt;br /&gt;
#comment - Insert migration file code snippet here&lt;br /&gt;
&lt;br /&gt;
===TeamsParticipant Model===&lt;br /&gt;
A new model TeamsParticipant was introduced to manage the many-to-many relationship between teams and assignment-specific participants.&lt;br /&gt;
&lt;br /&gt;
#comment - Insert code block for TeamsParticipant model&lt;br /&gt;
&lt;br /&gt;
Key Features:&lt;br /&gt;
&lt;br /&gt;
belongs_to :team&lt;br /&gt;
&lt;br /&gt;
belongs_to :participant&lt;br /&gt;
&lt;br /&gt;
Validations for presence and uniqueness of associations&lt;br /&gt;
&lt;br /&gt;
Centralized logic for managing team membership&lt;br /&gt;
&lt;br /&gt;
===TeamsParticipantsController===&lt;br /&gt;
This new controller handles adding and removing participants from teams. By isolating this logic, we simplify the primary TeamsController and adhere more closely to Rails conventions.&lt;br /&gt;
&lt;br /&gt;
#comment - Insert code block for TeamsParticipantsController#create method&lt;br /&gt;
&lt;br /&gt;
Highlights:&lt;br /&gt;
&lt;br /&gt;
Validates participant existence before adding to a team&lt;br /&gt;
&lt;br /&gt;
Uses flash messaging for user feedback&lt;br /&gt;
&lt;br /&gt;
Prevents duplicate entries through model-level validations&lt;br /&gt;
&lt;br /&gt;
===View Layer Enhancements===&lt;br /&gt;
The front-end views were updated to:&lt;br /&gt;
&lt;br /&gt;
Display team members using participant names, not user IDs&lt;br /&gt;
&lt;br /&gt;
Handle nil values gracefully to avoid unexpected crashes&lt;br /&gt;
&lt;br /&gt;
Provide meaningful error messages and user feedback&lt;br /&gt;
&lt;br /&gt;
Present team layouts in a cleaner, more intuitive format&lt;br /&gt;
&lt;br /&gt;
#comment - Add screenshots or HTML.erb snippets showing before/after of team views&lt;br /&gt;
&lt;br /&gt;
==Testing Strategy==&lt;br /&gt;
&lt;br /&gt;
===Unit Testing===&lt;br /&gt;
&lt;br /&gt;
Model-level tests ensure associations, validations, and constraints in TeamsParticipant.&lt;br /&gt;
&lt;br /&gt;
Prevents duplicate memberships.&lt;br /&gt;
&lt;br /&gt;
Verifies foreign key constraints (e.g., participant must exist).&lt;br /&gt;
&lt;br /&gt;
===Controller Testing===&lt;br /&gt;
&lt;br /&gt;
Tests for create/destroy actions in TeamsParticipantsController.&lt;br /&gt;
&lt;br /&gt;
Simulate valid and invalid inputs.&lt;br /&gt;
&lt;br /&gt;
Confirm redirection behavior and error message accuracy.&lt;br /&gt;
&lt;br /&gt;
===Integration Testing===&lt;br /&gt;
&lt;br /&gt;
Create full user workflows from team creation to submission.&lt;br /&gt;
&lt;br /&gt;
Use Capybara and feature specs for form submission, error state, and redirection flow.&lt;br /&gt;
&lt;br /&gt;
#comment - Insert RSpec test case examples for TeamsParticipant and controller&lt;br /&gt;
&lt;br /&gt;
===RSpec Summary=== All tests have been run with RSpec across models, controllers, and features. Integration is monitored using GitHub Actions for CI/CD. The system passed all tests post-refactor, with added coverage for new components.&lt;br /&gt;
&lt;br /&gt;
#comment - Add RSpec test result screenshot&lt;br /&gt;
&lt;br /&gt;
==AI-Assisted Refactoring==&lt;br /&gt;
We utilized Cursor IDE to accelerate the refactoring process. Its semantic code search and context-aware suggestions helped:&lt;br /&gt;
&lt;br /&gt;
Refactor large controller methods into smaller ones.&lt;br /&gt;
&lt;br /&gt;
Identify redundant logic and recommend method extractions.&lt;br /&gt;
&lt;br /&gt;
Improve variable naming for clarity.&lt;br /&gt;
&lt;br /&gt;
Safely reorganize models and controller responsibilities.&lt;br /&gt;
&lt;br /&gt;
Cursor’s assistance also ensured that refactored code aligned with principles from Clean Code and best practices in Rails development.&lt;br /&gt;
&lt;br /&gt;
==Design Principles Applied==&lt;br /&gt;
&lt;br /&gt;
Single Responsibility Principle (SRP)&lt;br /&gt;
&lt;br /&gt;
Don’t Repeat Yourself (DRY)&lt;br /&gt;
&lt;br /&gt;
Separation of Concerns (SoC)&lt;br /&gt;
&lt;br /&gt;
Consistent Error Handling&lt;br /&gt;
&lt;br /&gt;
Explicit Association Mapping&lt;br /&gt;
&lt;br /&gt;
Rails MVC Compliance&lt;br /&gt;
&lt;br /&gt;
==Implementation Impact==&lt;br /&gt;
The refactor delivered:&lt;br /&gt;
&lt;br /&gt;
Reduced ambiguity in team assignment logic.&lt;br /&gt;
&lt;br /&gt;
Improved scalability for supporting multiple assignments.&lt;br /&gt;
&lt;br /&gt;
Better maintainability and readability.&lt;br /&gt;
&lt;br /&gt;
Robust error messaging and input validation.&lt;br /&gt;
&lt;br /&gt;
Cleaner view rendering logic and fewer frontend crashes.&lt;br /&gt;
&lt;br /&gt;
==Final Code Overview==&lt;br /&gt;
&lt;br /&gt;
Teams and participants are now linked via TeamsParticipant, not TeamsUser.&lt;br /&gt;
&lt;br /&gt;
New controller separates membership responsibilities.&lt;br /&gt;
&lt;br /&gt;
Views updated to reflect new model structure.&lt;br /&gt;
&lt;br /&gt;
Comprehensive test coverage ensures resilience.&lt;br /&gt;
&lt;br /&gt;
No regression in functionality post-refactor.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
Expertiza GitHub Repository&lt;br /&gt;
&lt;br /&gt;
Ruby on Rails Guides&lt;br /&gt;
&lt;br /&gt;
RSpec Documentation&lt;br /&gt;
&lt;br /&gt;
Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin&lt;br /&gt;
&lt;br /&gt;
Cursor IDE (https://www.cursor.sh/)&lt;br /&gt;
&lt;br /&gt;
==Peer Review Notes==&lt;br /&gt;
This narrative document replaces the previous bullet-point-based design update. It is intended to provide a comprehensive explanation of both the implementation and reasoning behind our refactoring decisions. Reviewers are encouraged to evaluate the clarity of the design rationale, test completeness, and code modularity.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
Sweekar Burji (sburji)&lt;br /&gt;
James Patel (jpatel42)&lt;br /&gt;
Isaac Taylor (itaylor)&lt;/div&gt;</summary>
		<author><name>Jpatel42</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2500._Refactor_Student_Teams_Functionality&amp;diff=163881</id>
		<title>CSC/ECE 517 Spring 2025 - E2500. Refactor Student Teams Functionality</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2500._Refactor_Student_Teams_Functionality&amp;diff=163881"/>
		<updated>2025-04-08T17:50:22Z</updated>

		<summary type="html">&lt;p&gt;Jpatel42: Created page with &amp;quot;==Expertiza Background== Expertiza is a Ruby on Rails-based open-source platform developed at NC State University, designed to enhance the management of assignment submissions, peer reviews, and team-based collaboration. It is actively maintained and improved by students and staff, enabling rich pedagogical workflows through features like topic selection, automated and manual review assignment, and team functionality.  ==Student Teams Functionality Refactor== This initia...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Expertiza Background==&lt;br /&gt;
Expertiza is a Ruby on Rails-based open-source platform developed at NC State University, designed to enhance the management of assignment submissions, peer reviews, and team-based collaboration. It is actively maintained and improved by students and staff, enabling rich pedagogical workflows through features like topic selection, automated and manual review assignment, and team functionality.&lt;br /&gt;
&lt;br /&gt;
==Student Teams Functionality Refactor==&lt;br /&gt;
This initiative (E2500) targets the core mechanism by which student team memberships are handled in Expertiza. The motivation was to resolve ambiguity and reduce technical debt by shifting from a global user-based team model to a participant-centric model, better aligning with the domain logic of assignment-specific participation.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The current implementation uses the teams_users table to associate teams with users globally. However, this design fails to recognize that a student may enroll in multiple assignments, each with potentially different team affiliations. This misalignment complicates membership validation, reduces data integrity, and introduces ambiguity across the system.&lt;br /&gt;
&lt;br /&gt;
Additional issues:&lt;br /&gt;
&lt;br /&gt;
Business logic is embedded in controllers, violating separation of concerns.&lt;br /&gt;
&lt;br /&gt;
Models like SignedUpTeam use raw SQL queries, reducing readability and increasing maintenance risk.&lt;br /&gt;
&lt;br /&gt;
Lack of validation and redundant logic inflate technical debt.&lt;br /&gt;
&lt;br /&gt;
==Refactor Goals==&lt;br /&gt;
&lt;br /&gt;
Align the data model with a participant-centric architecture.&lt;br /&gt;
&lt;br /&gt;
Create a new TeamsParticipants model and controller.&lt;br /&gt;
&lt;br /&gt;
Remove redundant fields and logic (e.g., user_id in team membership).&lt;br /&gt;
&lt;br /&gt;
Improve clarity, maintainability, and adherence to MVC best practices.&lt;br /&gt;
&lt;br /&gt;
Enhance the views to support edge cases and provide cleaner UX.&lt;br /&gt;
&lt;br /&gt;
Expand test coverage to ensure system integrity post-refactor.&lt;br /&gt;
&lt;br /&gt;
==Design &amp;amp; Implementation==&lt;br /&gt;
&lt;br /&gt;
===Schema Migration===&lt;br /&gt;
We introduced a migration that:&lt;br /&gt;
&lt;br /&gt;
Renames teams_users to teams_participants.&lt;br /&gt;
&lt;br /&gt;
Replaces user_id with participant_id, enforcing assignment specificity.&lt;br /&gt;
&lt;br /&gt;
Removes redundant fields and adds proper indexing for data integrity.&lt;br /&gt;
&lt;br /&gt;
#comment - Insert migration file code snippet here&lt;br /&gt;
&lt;br /&gt;
===TeamsParticipant Model===&lt;br /&gt;
A new model TeamsParticipant was introduced to manage the many-to-many relationship between teams and assignment-specific participants.&lt;br /&gt;
&lt;br /&gt;
#comment - Insert code block for TeamsParticipant model&lt;br /&gt;
&lt;br /&gt;
Key Features:&lt;br /&gt;
&lt;br /&gt;
belongs_to :team&lt;br /&gt;
&lt;br /&gt;
belongs_to :participant&lt;br /&gt;
&lt;br /&gt;
Validations for presence and uniqueness of associations&lt;br /&gt;
&lt;br /&gt;
Centralized logic for managing team membership&lt;br /&gt;
&lt;br /&gt;
===TeamsParticipantsController===&lt;br /&gt;
This new controller handles adding and removing participants from teams. By isolating this logic, we simplify the primary TeamsController and adhere more closely to Rails conventions.&lt;br /&gt;
&lt;br /&gt;
#comment - Insert code block for TeamsParticipantsController#create method&lt;br /&gt;
&lt;br /&gt;
Highlights:&lt;br /&gt;
&lt;br /&gt;
Validates participant existence before adding to a team&lt;br /&gt;
&lt;br /&gt;
Uses flash messaging for user feedback&lt;br /&gt;
&lt;br /&gt;
Prevents duplicate entries through model-level validations&lt;br /&gt;
&lt;br /&gt;
===View Layer Enhancements===&lt;br /&gt;
The front-end views were updated to:&lt;br /&gt;
&lt;br /&gt;
Display team members using participant names, not user IDs&lt;br /&gt;
&lt;br /&gt;
Handle nil values gracefully to avoid unexpected crashes&lt;br /&gt;
&lt;br /&gt;
Provide meaningful error messages and user feedback&lt;br /&gt;
&lt;br /&gt;
Present team layouts in a cleaner, more intuitive format&lt;br /&gt;
&lt;br /&gt;
#comment - Add screenshots or HTML.erb snippets showing before/after of team views&lt;br /&gt;
&lt;br /&gt;
==Testing Strategy==&lt;br /&gt;
&lt;br /&gt;
===Unit Testing===&lt;br /&gt;
&lt;br /&gt;
Model-level tests ensure associations, validations, and constraints in TeamsParticipant.&lt;br /&gt;
&lt;br /&gt;
Prevents duplicate memberships.&lt;br /&gt;
&lt;br /&gt;
Verifies foreign key constraints (e.g., participant must exist).&lt;br /&gt;
&lt;br /&gt;
===Controller Testing===&lt;br /&gt;
&lt;br /&gt;
Tests for create/destroy actions in TeamsParticipantsController.&lt;br /&gt;
&lt;br /&gt;
Simulate valid and invalid inputs.&lt;br /&gt;
&lt;br /&gt;
Confirm redirection behavior and error message accuracy.&lt;br /&gt;
&lt;br /&gt;
===Integration Testing===&lt;br /&gt;
&lt;br /&gt;
Create full user workflows from team creation to submission.&lt;br /&gt;
&lt;br /&gt;
Use Capybara and feature specs for form submission, error state, and redirection flow.&lt;br /&gt;
&lt;br /&gt;
#comment - Insert RSpec test case examples for TeamsParticipant and controller&lt;br /&gt;
&lt;br /&gt;
===RSpec Summary=== All tests have been run with RSpec across models, controllers, and features. Integration is monitored using GitHub Actions for CI/CD. The system passed all tests post-refactor, with added coverage for new components.&lt;br /&gt;
&lt;br /&gt;
#comment - Add RSpec test result screenshot&lt;br /&gt;
&lt;br /&gt;
==AI-Assisted Refactoring==&lt;br /&gt;
We utilized Cursor IDE to accelerate the refactoring process. Its semantic code search and context-aware suggestions helped:&lt;br /&gt;
&lt;br /&gt;
Refactor large controller methods into smaller ones.&lt;br /&gt;
&lt;br /&gt;
Identify redundant logic and recommend method extractions.&lt;br /&gt;
&lt;br /&gt;
Improve variable naming for clarity.&lt;br /&gt;
&lt;br /&gt;
Safely reorganize models and controller responsibilities.&lt;br /&gt;
&lt;br /&gt;
Cursor’s assistance also ensured that refactored code aligned with principles from Clean Code and best practices in Rails development.&lt;br /&gt;
&lt;br /&gt;
==Design Principles Applied==&lt;br /&gt;
&lt;br /&gt;
Single Responsibility Principle (SRP)&lt;br /&gt;
&lt;br /&gt;
Don’t Repeat Yourself (DRY)&lt;br /&gt;
&lt;br /&gt;
Separation of Concerns (SoC)&lt;br /&gt;
&lt;br /&gt;
Consistent Error Handling&lt;br /&gt;
&lt;br /&gt;
Explicit Association Mapping&lt;br /&gt;
&lt;br /&gt;
Rails MVC Compliance&lt;br /&gt;
&lt;br /&gt;
==Implementation Impact==&lt;br /&gt;
The refactor delivered:&lt;br /&gt;
&lt;br /&gt;
Reduced ambiguity in team assignment logic.&lt;br /&gt;
&lt;br /&gt;
Improved scalability for supporting multiple assignments.&lt;br /&gt;
&lt;br /&gt;
Better maintainability and readability.&lt;br /&gt;
&lt;br /&gt;
Robust error messaging and input validation.&lt;br /&gt;
&lt;br /&gt;
Cleaner view rendering logic and fewer frontend crashes.&lt;br /&gt;
&lt;br /&gt;
==Final Code Overview==&lt;br /&gt;
&lt;br /&gt;
Teams and participants are now linked via TeamsParticipant, not TeamsUser.&lt;br /&gt;
&lt;br /&gt;
New controller separates membership responsibilities.&lt;br /&gt;
&lt;br /&gt;
Views updated to reflect new model structure.&lt;br /&gt;
&lt;br /&gt;
Comprehensive test coverage ensures resilience.&lt;br /&gt;
&lt;br /&gt;
No regression in functionality post-refactor.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
Expertiza GitHub Repository&lt;br /&gt;
&lt;br /&gt;
Ruby on Rails Guides&lt;br /&gt;
&lt;br /&gt;
RSpec Documentation&lt;br /&gt;
&lt;br /&gt;
Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin&lt;br /&gt;
&lt;br /&gt;
Cursor IDE (https://www.cursor.sh/)&lt;br /&gt;
&lt;br /&gt;
==Peer Review Notes==&lt;br /&gt;
This narrative document replaces the previous bullet-point-based design update. It is intended to provide a comprehensive explanation of both the implementation and reasoning behind our refactoring decisions. Reviewers are encouraged to evaluate the clarity of the design rationale, test completeness, and code modularity.&lt;/div&gt;</summary>
		<author><name>Jpatel42</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025&amp;diff=163880</id>
		<title>CSC/ECE 517 Spring 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025&amp;diff=163880"/>
		<updated>2025-04-08T17:39:25Z</updated>

		<summary type="html">&lt;p&gt;Jpatel42: /* Final Projects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Spring 2025 - E2503. Refactor the Team hierarchy]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2504. Mentor-meeting management]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2505. Testing Answer Tagging]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2508. Reimplement bidding-algorithm web service]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2509. Reimplement feedback_response_map.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2519. Implement view for results of bidding]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2522. Enhancing UI Consistency in Expertiza 1]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2520. Reimplement heatgrid UI for reviews]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2517. Reimplement internationalization (frontend + backend)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2523: Enhancing UI Consistency in Expertiza 2]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2515:  Reimplement student_teams_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2501:  Refactor review_mapping_helper.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2502:  Refactor review_mapping_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2512. Reimplement responses controller]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2510. Reimplement grades_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2507. Reimplement back end for submission records]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2514. Reimplement student_quizzes_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2518. Reimplement password resets (frontend + backend)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2516. Reimplement teams_users_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2511. Reimplement participants_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2521. UI for View submissions/assign grades (except heatgrid)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2513. Reimplement sign_up_topic.rb as project_topic.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2506. Implement testing for new Bookmarks Controller]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Final Projects ==&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2509 Refactoring and Enhancing the Feedback Response Map Controller]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2539 Reimplement Student Task View (Frontend + Backend)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2521 UI for View submissions/assign grades (except heatgrid)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2524 Reimplement student review controller]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2525 Reimplement review_mapping_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2526 Reimplement Teams and Participant hierarchies]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2530 Reimplement Grades Controller (Frontend + Backend)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2534 UI for Assign Reviewers]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2540 Integration of Assignment participant Frontend with participant controller Backend]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2532. Reimplement Missing ResponseMap Subclasses]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2542. Refactor review_bids_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2533. ​​Reimplement the Team hierarchy]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2531 Refactor participants_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2528 Testing for Survey Deployment]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2514. Reimplement student_quizzes_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2516. Reimplement teams_users_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2535 Reimplement User Profile Management (Frontend + Backend)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2536. Improve assessment360 controller]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2527. Mentor-meeting management: assignments with topics]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2529. Testing for the Questionnaire Helper in Expertiza]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2500. Refactor Student Teams Functionality]]&lt;/div&gt;</summary>
		<author><name>Jpatel42</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025&amp;diff=163879</id>
		<title>CSC/ECE 517 Spring 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025&amp;diff=163879"/>
		<updated>2025-04-08T16:56:54Z</updated>

		<summary type="html">&lt;p&gt;Jpatel42: /* Final Projects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Spring 2025 - E2503. Refactor the Team hierarchy]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2504. Mentor-meeting management]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2505. Testing Answer Tagging]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2508. Reimplement bidding-algorithm web service]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2509. Reimplement feedback_response_map.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2519. Implement view for results of bidding]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2522. Enhancing UI Consistency in Expertiza 1]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2520. Reimplement heatgrid UI for reviews]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2517. Reimplement internationalization (frontend + backend)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2523: Enhancing UI Consistency in Expertiza 2]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2515:  Reimplement student_teams_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2501:  Refactor review_mapping_helper.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2502:  Refactor review_mapping_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2512. Reimplement responses controller]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2510. Reimplement grades_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2507. Reimplement back end for submission records]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2514. Reimplement student_quizzes_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2518. Reimplement password resets (frontend + backend)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2516. Reimplement teams_users_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2511. Reimplement participants_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2521. UI for View submissions/assign grades (except heatgrid)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2513. Reimplement sign_up_topic.rb as project_topic.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2506. Implement testing for new Bookmarks Controller]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Final Projects ==&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2509 Refactoring and Enhancing the Feedback Response Map Controller]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2539 Reimplement Student Task View (Frontend + Backend)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2521 UI for View submissions/assign grades (except heatgrid)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2524 Reimplement student review controller]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2525 Reimplement review_mapping_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2526 Reimplement Teams and Participant hierarchies]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2530 Reimplement Grades Controller (Frontend + Backend)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2534 UI for Assign Reviewers]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2540 Integration of Assignment participant Frontend with participant controller Backend]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2532. Reimplement Missing ResponseMap Subclasses]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2542. Refactor review_bids_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2533. ​​Reimplement the Team hierarchy]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2531 Refactor participants_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2528 Testing for Survey Deployment]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2514. Reimplement student_quizzes_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2516. Reimplement teams_users_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2535 Reimplement User Profile Management (Frontend + Backend)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2536. Improve assessment360 controller]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2527. Mentor-meeting management: assignments with topics]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2529. Testing for the Questionnaire Helper in Expertiza]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2025 - E2541. Refactor Student Teams Functionality]]&lt;/div&gt;</summary>
		<author><name>Jpatel42</name></author>
	</entry>
</feed>