Skip to content

Commit 96ca2c6

Browse files
committed
Initial commit
0 parents  commit 96ca2c6

18 files changed

+47640
-0
lines changed

.gitattributes

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[core]
2+
autocrlf=true
3+
whitespace=trailing-space

.gitignore

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# See https://help.github.com/ignore-files/ for more about ignoring files.
2+
3+
# dependencies
4+
node_modules
5+
6+
# testing
7+
coverage
8+
9+
# production
10+
build
11+
12+
# misc
13+
.DS_Store
14+
.env.local
15+
.env.development.local
16+
.env.test.local
17+
.env.production.local
18+
19+
npm-debug.log*
20+
yarn-debug.log*
21+
yarn-error.log*
22+
23+
bin
24+
obj
25+
.vs
26+
.vscode
27+
*.idea
28+
*.user
29+
30+
tailwind.generated.css

README.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# e-conomic & sproom hiring task
2+
3+
As a part of the e-conomic/sproom recruitment process we ask our candidates to complete a practical development challenge. The challenge consists of two parts:
4+
5+
1. You solve the provided task, and send the results to us.
6+
2. We host a session where you present your solution to us, and we all have a nice talk about it.
7+
8+
The task is to implement a simple time logger web application that solves the following three user stories:
9+
10+
1. As a freelancer I want to be able to register how I spend time on my _projects_, so that I can provide my _customers_ with an overview of my work.
11+
2. As a freelancer I want to be able to get an _overview of my time registrations per project_, so that I can create correct invoices for my customers.
12+
2. As a freelancer I want to be able to _sort my projects by their deadline_, so that I can prioritise my work.
13+
14+
Individual time registrations should be 30 minutes or longer, and once a project is complete it can no longer receive new registrations. You do not need to create an actual invoice.
15+
16+
We ask that you clone this repository to complete the task, rather than fork it. You can either push it to a repository on your own account, or simply send us the project in a zip if you prefer. We recommend removing installed dependencies such as the `node_modules` directory prior to zipping, to keep the file size down.
17+
18+
When presenting the solution please bring your own laptop if you have one. If you do not, please inform us before the meeting so that we can prepare.
19+
20+
## Considerations
21+
22+
What we're looking for is to see if you have the ability to transform a set of user requirements into a working solution, preferably creating some nice and clean code along the way. We will appreciate if your solution:
23+
24+
- Works, obviously
25+
- Contains readable, bug free code
26+
- Is appropriately covered by tests, in the frontend and backend (where required)
27+
- Follows sensible structured design patterns and thought proceses
28+
- Validates user input and contains test coverage for these use cases, at least in the backend
29+
- The front-end is typed using typescript
30+
31+
We want to see that you have thought about the design of your application, and considered how it might scale as it's complexity increases:
32+
33+
- Consider how your application might scale as it grows in use, and in number of developers working on it
34+
- Summarise any significant architectural decisions you take, to discuss in the presentation
35+
36+
## Questions
37+
38+
If you have any questions or concerns please simply ask.
39+
40+
---
41+
42+
We realise there are a lot of moving parts to such an application. To help, we have scaffolded a .NET Core v3.1 solution containing some basic setup to get you started, and a create-react-app base application for the front-end, containing some basic components and bootstrap styling to get you started.
43+
44+
- You are welcome to change or remove any part of this code, it is meant simply as a starting point
45+
- Styling and graphical design is not that important, we are assesing your ability to design and architect software - focus on that
46+
- Do not worry about authentication, imagine your application is already authenticated
47+
- You do not _need_ to create a database and can hardcode data in the appropriate place in your application, as if it were coming from a database
48+
49+
## Development
50+
51+
To run this project you will need both .NET Core v3.1 and Node installed on your environment.
52+
53+
Server - `dotnet restore` - to restore nuget packages, `dotnet build` - to build the solution, `cd Timelogger.Api && dotnet run` - starts a server on http://localhost:3001. You can download Visual Studio Code. The project was tested on MacOS High Sierra and Windows 10.
54+
55+
The server solution contains an API only with a basic Entity Framework in memory context that acts as a database.
56+
57+
Client - `npm install` to install dependencies, `npm start` runs the create-react-app development server

README2.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Api
2+
3+
4+
- You can sort when calling the api by using the `_sort={property}` and `_order={asc|desc}` query strings
5+
- You can paginate when calling the api by using the `_page={pageNumber}` and `_limit={pageSize}` query strings
6+
- You can full text search when calling the api by using the `q={query}` query string, this works across all properties

api/data.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"clients": [
3+
{
4+
"id": 1,
5+
"name": "Visma e-conomic a/s"
6+
}
7+
],
8+
"projects": [
9+
{
10+
"id": 1,
11+
"clientId": 1,
12+
"name": "Live coding interview 1"
13+
},
14+
{
15+
"id": 2,
16+
"clientId": 1,
17+
"name": "Live coding interview 2"
18+
},
19+
{
20+
"id": 3,
21+
"clientId": 1,
22+
"name": "Live coding interview 3"
23+
}
24+
]
25+
}

craco.config.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
module.exports = {
2+
style: {
3+
postcss: {
4+
plugins: [
5+
require('tailwindcss'),
6+
require('autoprefixer'),
7+
],
8+
},
9+
},
10+
};

0 commit comments

Comments
 (0)