Practical Assignment

Build something that demonstrates the following:

● The ability to architect an application

● The ability to build a beautifully styled front-end or back-end system

● Ability to consume web services as described below

● Ability to build a login with authentication

● Ability to perform basic listing, filtering and viewing etc of the data using web services

 Use GitHub as the source control.

Email through the Git repo’s URL once created and make sure you check in regularly.

Bonus points [ although expected :) ]

● Unit tests

Setup

Scaffold an application using the technology decided.

Assignment Overview

● Create an interface admin dashboard that you can login and view all employees in the company.

● Add the ability to view a statistics dashboard with data such as number of employees, birthdays this month, position data, reviews etc. Be creative here.

● Make it easy to find employees in general or relevant to the dashboard.

● Ability to view my full profile

Web Services

You will be using the T internal web services to build up part of your own system.

The API can be found here: http://staging.████████████████/api/ with the login on the top right.

Login Details:

Username: pravin.gordhan

Password: pravin.gordhan

Authentication Service

The authentication service is a token based authentication service to log the user in. Currently

the tokens do not expire. All the data returned from the service is based on the user’s

permissions.

Authentication Process:

First you need to retrieve a token by POSTing the username and password to the api-token-auth end point - http://staging.████████████████/api-token-auth/

"username=pravin.gordhan&password=pravin.gordhan"

or

{

'username':'pravin.gordhan',

'password':'pravin.gordhan'

}

You can test this with a basic CURL request as shown below

curl -X POST http://staging.████████████████/api-token-auth/ --data "username=pravin.gordhan&password=pravin.gordhan"

This will return a token object:

{"token":"2a3d1af2f3f6d1cddaa3012c1c465fcbdffa3678"}

With the token make any further calls. For example if you wanted to get the details of the logged in user we can call the api:

http://staging.████████████████/api/user/me/

by using:

curl -X GET http://staging.████████████████/api/user/me/ -H 'Authorization: Token 2a3d1af2f3f6d1cddaa3012c1c465fcbdffa3678'

which returns:

{

id: 12,

username: "pravin.gordhan",

email: "This email address is being protected from spambots. You need JavaScript enabled to view it.",

first_name: "Pravin",

last_name: "Gordhan",

is_active: true,

is_staff: true,

is_superuser: false

}

Employee Service

The employee is linked to a user object (one to one) and has:

● User details (All details for the employee such as email, address, etc)

● Position (The position you hold such as Senior Front-end Developer)

● Next of Kins (Any details of next of kin)

● Reviews (Every review employee has with related salary or position changes)

Used to retrieve all staff profiles for the employees. General users will get a limited view of the

employees excluding salary, leave and reviews. An employee object cannot be created. It is

automatically created when a user is created. You cannot delete an employee.

http://staging.████████████████/api/employee/

Gender Types

● 'M', 'Male'

● 'F', 'Female'

Race Types (Only some are covered in staging data)

● 'B', 'Black African'

● 'C', 'Coloured'

● 'I', 'Indian or Asian'

● 'W', 'White'

● 'N', 'None Dominant'

Filtering is available on:

● Race, position, start_date, user, gender, birth_date and email

/api/employee/?race=C&position=2&start_date_range=4&user=12&gender=M&birth_date_range=4&email__contains=prav

My Profile Service

Used to retrieve the full profile of the user logged in including salary and reviews.

http://staging.████████████████/api/employee/me/

Employee Review Types

● 'P', 'Performance Increase'

● 'S', 'Starting Salary'

● ‘A’, ‘Annual Increase’

● ‘E’, ‘Expectation Review

 

Additional requirements

  • Provide us with a Kubernetes config scripts that will create 2 pods on a cluster.
  • Only one pod needs to be accessible externally. This pod needs act as a proxy that will perform a call to the second pod to retrieve information.
  • The second pod needs to run your application.
  • Once this pod receives the request from the first pod it should respond with the information from the application.
  • Please ensure to include instructions to execute the required config scripts on minikube.
  • The applications may be written in any language.

Please pay particular attention to the requirement. If you are unsure of what to do, rather ask than guess. 

Please note that you have  7 days to complete this assignment

Please use GitHub as the source control and commit regularly. Please also send us a link to the GitHub repo once you’ve created it.

 

GitHub Link

(On request)