Skip to content

Instantly share code, notes, and snippets.

@fernandocamargo
Last active January 26, 2021 14:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fernandocamargo/abc284ccb9f9529b5b16cf389fd94e60 to your computer and use it in GitHub Desktop.
Save fernandocamargo/abc284ccb9f9529b5b16cf389fd94e60 to your computer and use it in GitHub Desktop.
Idea
{
"interview": {
"id": "9771aaf8-eafc-4658-b8ab-1b9eecf2f368",
"candidate": {
"id": "80959d1e-c507-49a2-b965-b3667c7eed48",
"firstName": "Fernando",
"lastName": "Camargo",
"headLine": "Senior Front End",
"photo": {}
},
"interviewer": {
"id": "7906da54-fc89-489b-9a66-191684dd8bd4",
"firstName": "Fernando",
"lastName": "Camargo"
},
"vertical": {
"id": "be758d60-ec97-416e-9ba6-d52efc7fc9ef",
"name": "Frontend"
},
"skills": [
{
"skill": {
"id": "348bce73-37f8-4571-9656-ac809567aadc",
"name": "Node.js"
}
}
],
"dateTime": "1611705600",
"startingTime": "1609946890",
"endingTime": "1609946926",
"feedback": "Not impressed :(",
"createdAt": "1598353194",
"updatedAt": "1609946926",
"language": "english"
},
"dimensions": {
"subDimensions": [
{
"id": "80577149-de08-40a5-acda-fb6568e197da",
"title": "Web Protocols \u0026 Standards",
"status": "StatusPublished",
"dimension": {
"id": "3f8d5e8c-7212-45d0-977d-351335eb9f58",
"title": "Protocols \u0026 Standards"
},
"createdAt": "1596802189",
"updatedAt": "1596802189"
},
{
"id": "7436ce2a-0c04-49c7-8355-ed973b4d825a",
"title": "Agile",
"status": "StatusPublished",
"dimension": {
"id": "99190d85-2bd3-4c90-92d7-55be3c674085",
"title": "Processes \u0026 Methodologies"
},
"createdAt": "1596802189",
"updatedAt": "1596802189"
},
{
"id": "de9963c0-b114-411e-ab19-bdaa66574d31",
"title": "Architecture",
"status": "StatusPublished",
"dimension": {
"id": "4f21ad01-43b2-4d2b-b2a6-8b7ee8feab38",
"title": "Artificial Intelligence"
},
"createdAt": "1596802189",
"updatedAt": "1596802189"
},
{
"id": "048785ab-eb9b-44b3-bdcc-8e59c4ce1902",
"title": "OOP",
"description": "This is a test recording...",
"status": "StatusPublished",
"dimension": {
"id": "1a0199f4-6ba8-491b-bdf3-59d50d4f36c7",
"title": "Software Engineering",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer in augue auctor, dapibus nisl ac, vehicula neque. Sed auctor libero vel dapibus euismod. Donec semper, ligula ultrices viverra laoreet, risus ante bibendum arcu, non rutrum odio nulla eget quam. Quisque rutrum arcu mauris, sed vulputate nunc bibendum ac. Fusce convallis nec orci quis vehicula. Mauris id neque sagittis, vestibulum quam vel, vehicula sapien. Vivamus convallis metus sit amet magna sodales vulputate. Etiam venenatis magna id nisi tincidunt, a fringilla nisl fringilla. Duis tellus dolor, sagittis fermentum aliquam et, vestibulum a nisi. In eget urna in justo euismod pretium. Aliquam tincidunt nunc quis arcu luctus, non lobortis urna consectetur. Sed accumsan enim vitae interdum lobortis."
},
"createdAt": "1596794989",
"updatedAt": "1596794989"
},
{
"id": "35d49cb2-040e-42b2-98ef-3f39fd5e3ef3",
"title": "Design Patterns",
"description": "This is a test recording...",
"status": "StatusPublished",
"dimension": {
"id": "1a0199f4-6ba8-491b-bdf3-59d50d4f36c7",
"title": "Software Engineering",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer in augue auctor, dapibus nisl ac, vehicula neque. Sed auctor libero vel dapibus euismod. Donec semper, ligula ultrices viverra laoreet, risus ante bibendum arcu, non rutrum odio nulla eget quam. Quisque rutrum arcu mauris, sed vulputate nunc bibendum ac. Fusce convallis nec orci quis vehicula. Mauris id neque sagittis, vestibulum quam vel, vehicula sapien. Vivamus convallis metus sit amet magna sodales vulputate. Etiam venenatis magna id nisi tincidunt, a fringilla nisl fringilla. Duis tellus dolor, sagittis fermentum aliquam et, vestibulum a nisi. In eget urna in justo euismod pretium. Aliquam tincidunt nunc quis arcu luctus, non lobortis urna consectetur. Sed accumsan enim vitae interdum lobortis."
},
"createdAt": "1596794989",
"updatedAt": "1596794989"
},
{
"id": "bf102c9f-e9ab-4c44-8174-d5f2c936c6b7",
"title": "Best Practices",
"status": "StatusPublished",
"dimension": {
"id": "1a0199f4-6ba8-491b-bdf3-59d50d4f36c7",
"title": "Software Engineering",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer in augue auctor, dapibus nisl ac, vehicula neque. Sed auctor libero vel dapibus euismod. Donec semper, ligula ultrices viverra laoreet, risus ante bibendum arcu, non rutrum odio nulla eget quam. Quisque rutrum arcu mauris, sed vulputate nunc bibendum ac. Fusce convallis nec orci quis vehicula. Mauris id neque sagittis, vestibulum quam vel, vehicula sapien. Vivamus convallis metus sit amet magna sodales vulputate. Etiam venenatis magna id nisi tincidunt, a fringilla nisl fringilla. Duis tellus dolor, sagittis fermentum aliquam et, vestibulum a nisi. In eget urna in justo euismod pretium. Aliquam tincidunt nunc quis arcu luctus, non lobortis urna consectetur. Sed accumsan enim vitae interdum lobortis."
},
"createdAt": "1596802189",
"updatedAt": "1596802189"
},
{
"id": "4d280d27-3678-43e4-812f-c43957526216",
"title": "Live Coding",
"status": "StatusPublished",
"dimension": {
"id": "796c3548-44ff-4c23-9bb8-b9ce57fb3513",
"title": "Live Coding",
"description": "Live Coding"
},
"createdAt": "1607962352",
"updatedAt": "1607962352",
"isMandatory": true
},
{
"id": "5c4d8c20-2fa1-4050-9e94-ba8f349aa0e7",
"title": "Live Coding",
"status": "StatusPublished",
"dimension": {
"id": "6e9eb1e0-1589-440b-a644-6de6e62654ea",
"title": "Live Coding"
},
"createdAt": "1610626189",
"updatedAt": "1610626189",
"isMandatory": true
},
{
"id": "c8fbc5ea-6cfc-465a-8608-c1eeb9ac82ff",
"title": "Scrum",
"status": "StatusPublished",
"dimension": {
"id": "99190d85-2bd3-4c90-92d7-55be3c674085",
"title": "Processes \u0026 Methodologies"
},
"createdAt": "1596802189",
"updatedAt": "1596802189"
},
{
"id": "9ca72592-eeb9-4225-8389-4de539c17e0f",
"title": "Kanban",
"status": "StatusPublished",
"dimension": {
"id": "99190d85-2bd3-4c90-92d7-55be3c674085",
"title": "Processes \u0026 Methodologies"
},
"createdAt": "1596802189",
"updatedAt": "1596802189"
},
{
"id": "5d89c8c1-21f1-442a-8011-557df9d26b8e",
"title": "Computational Complexity Theory",
"status": "StatusPublished",
"dimension": {
"id": "2b2ad444-a419-4a38-b8cd-bba39b14a8a5",
"title": "Computer Science",
"description": "As we deem the theoretical fundamentals of computer science crucial for a software engineer to have in order to deliver scalable and maintainable solutions, we cover the candidate's understanding of programming paradigms and how they are supported by the respective language."
},
"createdAt": "1596802189",
"updatedAt": "1596802189"
},
{
"id": "182db958-4f81-4961-9749-1dd62bb11838",
"title": "Data Structures \u0026 Algorithms",
"description": "We try to understand the candidate's knowledge of common (and less common) data structures that can be used. We want to understand and challenge the candidate's reasoning for storing data in a specific format depending on the problem at hand.",
"status": "StatusPublished",
"dimension": {
"id": "2b2ad444-a419-4a38-b8cd-bba39b14a8a5",
"title": "Computer Science",
"description": "As we deem the theoretical fundamentals of computer science crucial for a software engineer to have in order to deliver scalable and maintainable solutions, we cover the candidate's understanding of programming paradigms and how they are supported by the respective language."
},
"createdAt": "1596802189",
"updatedAt": "1596802189"
}
]
},
"questions": {
"interviewId": "9771aaf8-eafc-4658-b8ab-1b9eecf2f368",
"questions": [
{
"id": "96af2ac9-da6f-4b52-974a-388a4a16004c",
"text": "What are design patterns and why they are important? What are the different categories of design patterns? Could you explain 3 different patterns and give example for each?",
"isRequired": true,
"difficulty": "DifficultyMedium",
"subDimension": {
"id": "35d49cb2-040e-42b2-98ef-3f39fd5e3ef3",
"title": "Design Patterns"
},
"status": "StatusPublished",
"skills": [
{
"skill": {
"id": "a128ef9f-852a-4ec7-83a0-074c3e015c04",
"name": "All"
}
}
],
"createdAt": "1596802557",
"updatedAt": "1596802557",
"score": 6,
"note": "Well, could it be better but it's ok"
},
{
"id": "ac7edfea-2325-4d78-9621-72d152f7d4eb",
"text": "What is anti-pattern concept? What are some examples of anti-patterns?",
"hint": "In software engineering, an anti-pattern is a pattern that may be commonly used but is ineffective and/or counterproductive in practice.\nExamples:\n- Singleton Overuse\n- God Object\n- Functional Decomposition\n- Continuous Obsolescence\n- Ambiguous Viewpoint\n- Boat Anchor\n- Golden Hammer\n- Dead end\n- Input Kludge\n- Walking through a Minefield\n- Mushroom Management\n- Poltergeist\n- Spaghetti\n- Blob\n- Copy and Paste\n- Lava Flow",
"isRequired": true,
"difficulty": "DifficultyHard",
"subDimension": {
"id": "35d49cb2-040e-42b2-98ef-3f39fd5e3ef3",
"title": "Design Patterns"
},
"status": "StatusPublished",
"skills": [
{
"skill": {
"id": "a128ef9f-852a-4ec7-83a0-074c3e015c04",
"name": "All"
}
}
],
"createdAt": "1596802557",
"updatedAt": "1596802557",
"score": 9,
"note": "Really amazing..."
},
{
"id": "f7e92123-20d6-42e0-b144-d93d60be4acd",
"text": "Technology",
"hint": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec at nunc in arcu ultrices maximus non id orci. Cras quis nibh elementum, pellentesque libero at, condimentum ante. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut vestibulum pellentesque lorem, ac interdum sapien interdum at. Donec non mi ac urna sodales semper ut nec dolor. Curabitur non commodo leo. Cras rhoncus ac mauris et faucibus. In sed porta est, et tempus nulla. Aliquam commodo mauris ut ante tempor facilisis sollicitudin vitae nisi. Morbi interdum sagittis neque vitae fringilla. Mauris feugiat vel velit ac tempus.",
"isRequired": true,
"difficulty": "DifficultyEasy",
"subDimension": {
"id": "4d280d27-3678-43e4-812f-c43957526216",
"title": "Live Coding"
},
"status": "StatusPublished",
"createdAt": "1596802557",
"updatedAt": "1596802557",
"score": 9,
"note": "WOW!"
},
{
"id": "2cf5db5c-b682-4945-b5c1-9927dafde79a",
"text": "Communication",
"hint": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec at nunc in arcu ultrices maximus non id orci. Cras quis nibh elementum, pellentesque libero at, condimentum ante. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut vestibulum pellentesque lorem, ac interdum sapien interdum at. Donec non mi ac urna sodales semper ut nec dolor. Curabitur non commodo leo. Cras rhoncus ac mauris et faucibus. In sed porta est, et tempus nulla. Aliquam commodo mauris ut ante tempor facilisis sollicitudin vitae nisi. Morbi interdum sagittis neque vitae fringilla. Mauris feugiat vel velit ac tempus.",
"isRequired": true,
"difficulty": "DifficultyEasy",
"subDimension": {
"id": "4d280d27-3678-43e4-812f-c43957526216",
"title": "Live Coding"
},
"status": "StatusPublished",
"createdAt": "1596802557",
"updatedAt": "1596802557",
"score": 6
},
{
"id": "56ca3b75-14ec-4cc8-9e05-08839cbc2b42",
"text": "Testing",
"hint": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec at nunc in arcu ultrices maximus non id orci. Cras quis nibh elementum, pellentesque libero at, condimentum ante. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut vestibulum pellentesque lorem, ac interdum sapien interdum at. Donec non mi ac urna sodales semper ut nec dolor. Curabitur non commodo leo. Cras rhoncus ac mauris et faucibus. In sed porta est, et tempus nulla. Aliquam commodo mauris ut ante tempor facilisis sollicitudin vitae nisi. Morbi interdum sagittis neque vitae fringilla. Mauris feugiat vel velit ac tempus.",
"isRequired": true,
"difficulty": "DifficultyEasy",
"subDimension": {
"id": "4d280d27-3678-43e4-812f-c43957526216",
"title": "Live Coding"
},
"status": "StatusPublished",
"createdAt": "1596802557",
"updatedAt": "1596802557",
"score": 3
},
{
"id": "e6dc2e18-fecf-448a-acd4-0720c652aa36",
"text": "Solution",
"hint": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec at nunc in arcu ultrices maximus non id orci. Cras quis nibh elementum, pellentesque libero at, condimentum ante. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut vestibulum pellentesque lorem, ac interdum sapien interdum at. Donec non mi ac urna sodales semper ut nec dolor. Curabitur non commodo leo. Cras rhoncus ac mauris et faucibus. In sed porta est, et tempus nulla. Aliquam commodo mauris ut ante tempor facilisis sollicitudin vitae nisi. Morbi interdum sagittis neque vitae fringilla. Mauris feugiat vel velit ac tempus.",
"isRequired": true,
"difficulty": "DifficultyEasy",
"subDimension": {
"id": "4d280d27-3678-43e4-812f-c43957526216",
"title": "Live Coding"
},
"status": "StatusPublished",
"createdAt": "1596802557",
"updatedAt": "1596802557",
"score": 2
}
]
},
"report": {
"id": "9771aaf8-eafc-4658-b8ab-1b9eecf2f368",
"score": 6.25,
"dimensions": [
{
"id": "796c3548-44ff-4c23-9bb8-b9ce57fb3513",
"score": 5
},
{
"id": "1a0199f4-6ba8-491b-bdf3-59d50d4f36c7",
"score": 7.5
}
],
"subDimensions": [
{
"id": "4d280d27-3678-43e4-812f-c43957526216",
"score": 5
},
{
"id": "35d49cb2-040e-42b2-98ef-3f39fd5e3ef3",
"score": 7.5
}
],
"questions": [
{
"id": "2cf5db5c-b682-4945-b5c1-9927dafde79a",
"score": 6
},
{
"id": "f7e92123-20d6-42e0-b144-d93d60be4acd",
"score": 9
},
{
"id": "56ca3b75-14ec-4cc8-9e05-08839cbc2b42",
"score": 3
},
{
"id": "e6dc2e18-fecf-448a-acd4-0720c652aa36",
"score": 2
},
{
"id": "ac7edfea-2325-4d78-9621-72d152f7d4eb",
"score": 9
},
{
"id": "96af2ac9-da6f-4b52-974a-388a4a16004c",
"score": 6
}
]
}
}
@fernandocamargo
Copy link
Author

{
  "interview": [response of /interviews/{interview.id}],
  "dimensions": [response of /sub-dimensions?verticalID={interview.vertical.id}],
  "questions": [response of /interviews/{interview.id}/questions],
  "report": [response of /interviews/{interview.id}/report]
}

@fernandocamargo
Copy link
Author

If you could illustrate the backend endpoints as async methods, you would ending up having this:

  • /interviews/{interview.id} becomes getInterviewById()
  • /sub-dimensions?verticalID={interview.vertical.id} becomes getSubDimensionsByVerticalId()
  • /interviews/{interview.id}/questions becomes getQuestionsByInterviewId()
  • /interviews/{interview.id}/report becomes getQuestionsByInterviewId()

Then getAggregatedReport() would be nothing but this (performing all of them in parallel and just organising its responses in the shape I suggested):

Promise.all([
  getInterviewById(),
  getSubDimensionsByVerticalId(),
  getQuestionsByInterviewId(),
  getQuestionsByInterviewId(),
]).then(([interview, dimensions, questions, report]) => ({
  interview,
  dimensions,
  questions,
  report,
}))

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