This repository contains a technical interview project designed to evaluate candidates' skills across multiple areas of software development. The interview is structured to take approximately 1.5 hours, with the first 10-15 minutes allocated for setup (cloning the repository, connecting to the database, etc.).
The project simulates a simplified e-commerce system with the following components:
- Database: A SQL Server database with tables for products, variants, categories, subcategories, stock, and shops.
- Backend: An F# Giraffe API with Dapper for database access.
- Frontend: A React TypeScript application.
- Review the provided database schema in the
databasefolder. - Write a stored procedure that retrieves products with their variants, filtered by category.
- The stored procedure should:
- Accept a category ID as a parameter
- Join the necessary tables to fetch product information along with their variants
- Include information about stock availability
- Return a result set that can be consumed by the API
- Using the provided F# Giraffe boilerplate in the
backendfolder: - Create a new route that will expose the data from your stored procedure
- Implement a handler function for this route
- Create a repository function that calls your stored procedure using Dapper
- Format the data appropriately for the frontend to consume
- Ensure proper error handling and response status codes
- Using the provided React TypeScript boilerplate in the
frontendfolder: - Create a page component to display the products and their variants
- Implement a service to fetch data from the backend API
- Display the products in a user-friendly way (styling is up to you)
- Implement basic filtering or sorting functionality if time permits
Candidates will be evaluated on:
- Code Quality: Clean, readable, and maintainable code
- Technical Knowledge: Understanding of SQL, F#, and React/TypeScript
- Problem-Solving: Approach to solving the given tasks
- Communication: Ability to explain decisions and thought processes
- Time Management: Completing tasks within the allocated time
Detailed setup instructions for each component are available in their respective folders:
- Database setup: database/README.md
- Backend setup: backend/README.md
- Frontend setup: frontend/README.md
Good luck!