Fork or clone repository.
You are required to implement a model using Entity Framework Core for a simple kanban board for tracking work progress.
-
Install the required
Microsoft.EntityFrameworkCore
package. -
Setup and configure your database host of choice.
-
Implement the following entities (POCOs) in the
Entities
project.- WorkItem
- Id : int
- Title : string(100), required
- AssignedTo : optional reference to User entity
- Description : string(max), optional
- State : enum (New, Active, Resolved, Closed, Removed), required
- Tags : many-to-many reference to Tag entity
- User
- Id : int
- Name : string(100), required
- Email : string(100), required, unique
- WorkItems : list of WorkItem entities belonging to User
- Tag
- Id : int
- Name : string(50), required, unique
- WorkItems : many-to-many reference to WorkItem entity
- WorkItem
-
Ensure that the
State
property of theWorkItem
entity is stored as astring
. See: https://docs.microsoft.com/en-us/ef/core/modeling/value-conversions. -
Implement the
KanbanContext
required for the model above in theEntities
project. -
Implement and test the
ITagRepository
and/or theIUserRepository
using the classes in theEntities
project -
Implement and test the
IWorkItemRepository
interface in theCore
project using theWorkItemRepository
class in theEntities
project.
- Trying to update or delete a non-existing entity should return
NotFound
. - Create, Read, and Update should return a proper
Response
. - Your are not allowed to write
throw new ...
- use theResponse
instead. - Your code must use an in-memory database for testing.
- If a workItem, tag, or user is not found, return
null
.
- Only work items with the state
New
can be deleted from the database. - Deleting a workItem which is
Active
should set its state toRemoved
. - Deleting a workItem which is
Resolved
,Closed
, orRemoved
should returnConflict
. - Creating a workItem will set its state to
New
andCreated
/StateUpdated
to current time in UTC. - Create/update workItem must allow for editing tags.
- Updating the
State
of a workItem will change theStateUpdated
to current time in UTC. - Assigning a user which does not exist should return
BadRequest
. - WorkItemRepository may not depend on TagRepository or UserRepository.
- Tags which are assigned to a workItem may only be deleted using the
force
. - Trying to delete a tag in use without the
force
should returnConflict
. - Trying to create a tag which exists already should return
Conflict
.
- Users who are assigned to a workItem may only be deleted using the
force
. - Trying to delete a user in use without the
force
should returnConflict
. - Trying to create a user which exists already (same email) should return
Conflict
.
Comparing actual time in a unit test can be tricky - DateTime.UtcNow
is too precise - so setting a value in a test to compare with value in code will not work.
You will want to allow timing to be slightly off - maybe by 5 seconds as the following snippet demonstrates:
var expected = DateTime.UtcNow;
var actual = DateTime.UtcNow.AddSeconds(2);
actual.Should().BeCloseTo(expected, precision: TimeSpan.FromSeconds(5)) // true
// or
Assert.Equal(expected, actual, precision: TimeSpan.FromSeconds(5)); // true
In the following exercises, whenever you are asked to draw a UML diagram do that with the help of a tool of your choice, see intro material.
- What level of detail should UML models have?
- What is the difference between structure diagrams and behavior diagrams in UML?
- Provide two examples per category.
Draw a UML class diagram that models the following specifications:
- A project has a name, a start date, and an end date.
- A project is associated to a project manager with a name, a telephone, and a team.
- A project manager manages (by starting and terminating) a project and leads a team that is associated with a project.
- Projects receive as input requirements and produce a system. Both requirements and the system have a completion percentage and a description.
- Each team is composed by developers.
Draw a UML state diagram that models your GitHub action configuration. Include all triggers that you have defined.
Files that are under version control with Git (or that should be) are in one of the four states: Untracked
, Unmodified
, Modified
, or Staged
, see the respective chapter in the Pro Git book.
In that book, the authors provide a sequence diagram instead of a state diagram to illustrate states and state changes of a file, see the illustration below.
Draw two UML state diagrams that illustrate the states of a single file that is version controlled with Git. Let the first state diagram start with cloning a remote repository containing a file that is then edited. The second state diagram has to illustrate the states of a file that is newly created in a Git repository.
Use the git commands clone
, add
and commit
together with file edit
s as events that trigger state changes.
Can you also illustrate the actions that Git performs on these events with the help of the chapter from the Pro Git book?
Translate the UML collaboration diagram (Fig. 14-14 from APPP), see below into a sequence diagram.
Draw a UML class diagram that models the structural information given in Fig. 5.7 from SE, see below
To submit the assignment you need to create a PDF document using LaTeX that contains the answers to the questions and a link to a public GitHub repository that contains a fork of the assignments repository with the completed code.
Note: You should not send a PR with your changes.
The PDF file must conform to the following naming convention: group_<x>_<id1>_<id2>_<id3>_assignment_03.pdf
, where <x>
is replaced by the number of your group from README_GROUPS.md and <id1>
, <id2>
, and <id3>
are your respective ITU identifiers.
You submit via LearnIT.