A full-stack application built with Go (backend) and React (frontend) that displays and manages user data from an Excel file, featuring MFA status filtering and password/access monitoring.
- Go 1.x
- Gin Web Framework
- excelize (for Excel file handling)
- React with TypeScript
- Vite
- Material-UI (MUI)
- date-fns
-
Clone the repository:
git clone git@github.com:ParthShahAtStonyBrook/TestAssignment.git cd TestAssignment
-
Backend Setup:
go mod download
-
Frontend Setup:
cd frontend npm install
-
Data Setup:
- Place your Excel file in the
data
directory - Ensure the file is named "Spec for IAM, Service users.xlsx"
- Verify the Excel file follows the required column structure
- Place your Excel file in the
-
Start the Backend (from project root):
go run main.go
The backend server will start on http://localhost:8081
-
Start the Frontend (in a new terminal):
cd frontend npm run dev
The frontend will be available at http://localhost:5173
- Framework Choice: Gin was chosen for its high performance and simplicity
- CORS Configuration: Configured to allow local development
- Date Handling:
- Dates are parsed in local timezone using
time.ParseInLocation
- Supports two date formats: "Jan 2 2006" and "Jan 02 2006"
- Future dates and invalid dates are handled
- Dates are parsed in local timezone using
- UI Framework: Material-UI for consistent, modern styling
- State Management: React hooks for local state management
- Data Display:
- Color-coded rows for different user states
- MFA status filtering
- Responsive table design
- Date formatting with proper timezone handling
-
User Status Indicators:
- Green: Active & Password Up to Date
- Yellow: Inactive (>90 days)
- Blue: Password Change Required (>365 days)
- Red: Both Inactive & Password Change Required
-
MFA Status Filtering:
- All Users
- MFA Enabled
- MFA Disabled
-
Date Monitoring:
- Account creation date
- Last access tracking
- Password change tracking
-
Data Storage:
- Using Excel file instead of a database for simplicity
- Trade-off: Limited scalability
-
Error Handling:
- Effective handling of invalid dates and missing data
- Trade-off: Some data validation is done client-side
-
Performance:
- All data loaded at once
- Trade-off: May not perform well with very large datasets