After exploring a couple of ideas, we decided to make a own version of timesheet management app because this is the only software we all share knowledge about!
We don't want to drive the concept too far but we still want to have some things be challenging enough to warant some thought about how to design it.
| Property | Type | Required |
|---|---|---|
| Id | int | yes |
| FirstName | string(50) | yes |
| LastName | string(50) | yes |
| UserRoles | UserRole |
| Property | Type | Required |
|---|---|---|
| Id | string(1) | yes |
| Description | string(100) | no |
| Property | Type | Required |
|---|---|---|
| Id | long | yes |
| From | date | yes |
| To | date | yes |
| Remarks | string(200) | no |
| IsApproved | bool | no |
| DisApprovedReason | string(200) | no |
| CreationDate | datetime | yes |
| User | User | yes |
| HolidayType | HolidayType | yes |
| Property | Type | Required |
|---|---|---|
| Id | string(1) | yes |
| Description | string(30) | yes |
- Employee
- Manager
- System administrator
- Register holiday
- From date
- Until date
- HolidayType
- Remarks
- List of holidays (by year)
- Total number of approved holidays
- Total number of disapproved holidays
- Total number of holidays to be approved
- Total number of approved holidays (grouped by HolidayType)
- Overview of approved holidayrequests
- From date
- Until date
- HolidayType
- Remarks
- Overview of holidayrequests to be approved
- From date
- Until date
- HolidayType
- Remarks
- Overview of disapproved holidayrequests
- From date
- Until date
- HolidayType
- Remarks
- DisapprovedReason
- Revoke holiday request
- Accept/Decline holiday request of employees
- Approved/Declined
- Decline reason
- Reports
- List holidays by person (same as "List of holidays" of Employee)
- List holidays (overview of all employees)
- Change HolidayTypes (Paid holiday, Normal holiday, Sick-leave, Maternity leave)
- Validations
- Default entity validations (required, max length,...)
- From date must be before To date
- From date must be before today
- Valid HolidayType
- Holiday is not yet in database (to + from + user combination)
- Employee
- Data
- Total number of approved holidays
- Total number of disapproved holidays
- Total number of holidays to be approved
- Total number of approved holidays (grouped by HolidayType) (dynamic array)
- Overview of approved holidayrequests
- From date
- Until date
- HolidayType
- Remarks
- Overview of holidayrequests to be approved
- From date
- Until date
- HolidayType
- Remarks
- Overview of disapproved holidayrequests
- From date
- Until date
- HolidayType
- Remarks
- DisapprovedReason
- Filter
- Year: if none provided (default): current year
- User: authenticated user
- Ordered by From date
- Data
To investigate:
- How to make the distinction between manager and employee and admin? Possible usertable in database with predefined users and assigned role
- Secure api calls
- Change api behaviour based on authentication
Because of previous experience and ease of use, we choose to use IdentityServer to host our security flows.
https://github.com/IdentityServer
Our Identityserver setup will only work with hard-code testusers, but it can be hooked up to different identifycation protocols ( Azure, Active Directory, Google, ...)
Authorization is the process of assigning rights to indicate what a certain entity is allowed to do in your application. For instance is a person allowed to see certain data.
Here we want to make use of OAuth 2.0 access tokens. A nice features of Identity Server is that it is also a fully compliant OAuth 2.0 provider. This makes setting up an OpenID/ OAuth2.0 very easy to setup!
not needed for backend for the moment :-)
- Validations
- Default entity validations (required, max length,...)
- Not yet approved
- Validations
- FirstName: length: 2-50
- LastName: length: max 50
- Combination of FirstName and LastName is unique.
- Manager: Same as for employee but extra filter: Employee
Same as for employee but extra grouping level: Employee
- Validations
- Decline reason
- Validations
- Check uniqueness of HolidayType
- Initial values
- Paid holiday
- Normal holiday
- Sick-leave
- Maternity leave
Do we need a more complex example (with a one-to-many relationship between "tables/entities")
Future functionalities or do we provide timesheets:
- Register timesheet (employee)
- List timesheets (employee)
- Accept/Decline timesheet of employees (manager)
- Change timesheet categories (application development, support,...)
- ...