Skip to content

Practical exam changes#1618

Open
AndrewBotsman wants to merge 8 commits into
jasontaylordev:mainfrom
AndrewBotsman:PM-Module4Interview
Open

Practical exam changes#1618
AndrewBotsman wants to merge 8 commits into
jasontaylordev:mainfrom
AndrewBotsman:PM-Module4Interview

Conversation

@AndrewBotsman
Copy link
Copy Markdown

Summary

This PR extends the CleanArchitecture template with a new Project Management module.

The implementation adds project-based to-do management across the domain, application, infrastructure, API, Angular UI, real-time communication, notifications, and tests.

The module supports:

  • Project to-do items
  • List view
  • Kanban board
  • Assignee and reporter tracking
  • Extensible project-specific statuses
  • Assignment notifications
  • Status-change email simulation
  • SignalR real-time updates
  • Seed/demo data
  • Automated tests

Main Features

Project Management

  • Added project entities and project to-do items.
  • Each project can contain multiple to-do items.
  • Each to-do item includes:
    • Title
    • Description
    • Due date
    • Assignee
    • Reporter
    • Status

Reporter

  • Reporter is assigned automatically from the currently authenticated user.
  • Reporter is handled server-side and is not trusted from client input.
  • Reporter is displayed in list view and edit view as read-only information.

Assignee

  • To-do items can be assigned, reassigned, or unassigned.
  • Assignment changes are persisted.
  • Assignment notifications are generated for the assignee.
  • Assignment/unassignment email simulation is written to the development email outbox.

Statuses

  • Added project-specific status model.
  • Seeded default statuses:
    • To Do
    • In Progress
    • Done
  • The model supports additional statuses beyond the required defaults.
  • New projects automatically receive default statuses.

List View

  • Added Angular list view for project to-do items.
  • Supports viewing key task details.
  • Supports assignment and status changes.
  • Supports editing and deleting items.

Kanban Board

  • Added Angular Kanban board grouped by status.
  • Supports drag-and-drop status changes.
  • Board reflects task status updates.
  • Layout is designed to handle longer text without breaking columns.

Notifications

  • Added in-app notifications for assignment events.
  • Notifications include a hyperlink to the related to-do item.
  • Added development email outbox for demonstrating email behavior.
  • Status changes create reporter email messages in the outbox.
  • Assignment and unassignment changes also create development email messages.

Real-Time Updates

  • Added SignalR hub for project to-do updates.
  • List and Kanban views receive real-time updates.
  • Implemented user-targeted SignalR notifications.
  • Added explicit SignalR user id provider.

Architecture

The implementation follows the existing Clean Architecture style used by the repository.

Domain

Added:

  • Project
  • ProjectTodoItem
  • ProjectTodoStatus
  • UserNotification
  • EmailOutboxMessage

Added domain events for:

  • Assignment changes
  • Status changes

Application

Added CQRS commands and queries for:

  • Creating projects
  • Getting projects
  • Creating, updating, deleting project to-do items
  • Assigning to-do items
  • Changing to-do item status
  • Getting project Kanban board data
  • Getting project statuses
  • Getting notifications
  • Marking notifications as read
  • Getting development email outbox messages
  • Getting assignable users

Infrastructure

Added:

  • EF Core configurations
  • DbSet registrations
  • Seed data
  • Development email service
  • Email outbox persistence
  • Identity lookup support for reporter/assignee display values

Web/API

Added endpoints for:

  • Projects
  • Project to-do items
  • Project to-do statuses
  • Notifications
  • Development email outbox
  • Assignable users

Added:

  • SignalR hub
  • SignalR user id provider
  • Proxy support for SignalR during Angular development

Angular UI

Added:

  • Projects page
  • Project detail page
  • Project to-do list view
  • Kanban board
  • Notifications page
  • SignalR realtime service

Testing

Added coverage for the new functionality.

Domain tests

Covers:

  • Assignment event guard behavior
  • No event on unchanged assignee
  • No assignment event on unassign
  • Status change event behavior
  • No event on unchanged status

Application functional tests

Covers:

  • Creating project to-do items
  • Reporter assignment from current user
  • Assignment notifications
  • Assignment/unassignment email outbox behavior
  • Status-change email outbox behavior
  • Kanban grouping

Web acceptance tests

Covers Angular end-to-end flows:

  • Projects page displays
  • Seeded demo project displays
  • User can create and open a project
  • User can create a project to-do item
  • User can edit a to-do item
  • User can assign a to-do item
  • User can change status
  • User can view the item in Kanban
  • Assignment notification is visible
  • Status-change email outbox message is visible

Demo Steps

  1. Start the application.
  2. Log in as a test user.
  3. Open the Projects page.
  4. Open the seeded Demo Project or create a new project.
  5. Create a project to-do item with title, description, due date, assignee, and status.
  6. Confirm the item appears in the list view.
  7. Edit the item and confirm the reporter is shown as read-only.
  8. Assign or reassign the item.
  9. Open Notifications and verify the assignment notification.
  10. Change the item status.
  11. Open Notifications and verify the development email outbox message.
  12. Open the Kanban view and confirm the item appears under the correct status.
  13. Move the item between Kanban columns.
  14. Open the same project in another browser tab and verify real-time updates.

Notes and Assumptions

  • Email delivery is implemented as a development-friendly outbox/logging simulation.
  • Status management UI is not included because the assessment marks it as optional.
  • Statuses are modeled as project-specific entities instead of an enum to support flexible workflows.
  • Angular frontend is used for all required UI functionality.
  • The solution is not API-only.
  • Development seed data is included to make the module demonstrable immediately.
  • The database is not deleted on every application startup so users and created projects persist across runs.

Known Limitations

  • Email messages are written to a development outbox rather than being sent through a production SMTP/provider.
  • Advanced status administration UI is not included.
  • The Kanban implementation focuses on the required workflow and demonstration rather than advanced board customization.

Validation

Before submission, the following were verified locally:

  • Application builds successfully.
  • Angular frontend runs.
  • Project Management UI works through the browser.
  • Domain tests pass.
  • Application functional tests pass.
  • Web acceptance tests pass.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant