OpenCap Stack is a comprehensive MERN stack application designed to manage stakeholders, share classes, documents, activities, notifications, equity simulations, tax calculations, and financial reporting. The project follows a Test-Driven Development (TDD) approach to ensure code quality and reliability and is fully aligned with the Open Cap Table Alliance (OCTA) schema.
Follow these steps to set up the project on your local machine:
- Node.js (v14 or higher)
- MongoDB
git clone https://github.com/your-username/your-repository.git
cd your-repository
npm install
Create a .env
file in the root of the project and add the following environment variables:
MONGODB_URI=mongodb://localhost:27017/opencap
PORT=5000
Replace mongodb://localhost:27017/opencap
with your MongoDB connection string if it's different.
npm start
This command starts the server on http://localhost:5000.
For automatic restarts on code changes, use:
npm run dev
The project uses Jest for testing. To run the tests, use the following command:
npm test
This command runs all the test cases defined in the tests
directory.
Here are the primary API endpoints for the project:
- POST /api/users: Create a new user
- GET /api/users: Get all users
- GET /api/users/:id: Get a user by ID
- PUT /api/users/:id: Update a user by ID
- DELETE /api/users/:id: Delete a user by ID
- POST /api/stakeholders: Create a new stakeholder
- GET /api/stakeholders: Get all stakeholders
- GET /api/stakeholders/:id: Get a stakeholder by ID
- PUT /api/stakeholders/:id: Update a stakeholder by ID
- DELETE /api/stakeholders/:id: Delete a stakeholder by ID
- POST /api/shareclasses: Create a new share class
- GET /api/shareclasses: Get all share classes
- GET /api/shareclasses/:id: Get a share class by ID
- PUT /api/shareclasses/:id: Update a share class by ID
- DELETE /api/shareclasses/:id: Delete a share class by ID
- POST /api/documents: Create a new document
- GET /api/documents: Get all documents
- GET /api/documents/:id: Get a document by ID
- PUT /api/documents/:id: Update a document by ID
- DELETE /api/documents/:id: Delete a document by ID
- POST /api/activities: Create a new activity
- GET /api/activities: Get all activities
- GET /api/activities/:id: Get an activity by ID
- PUT /api/activities/:id: Update an activity by ID
- DELETE /api/activities/:id: Delete an activity by ID
- POST /api/notifications: Create a new notification
- GET /api/notifications: Get all notifications
- GET /api/notifications/:id: Get a notification by ID
- PUT /api/notifications/:id: Update a notification by ID
- DELETE /api/notifications/:id: Delete a notification by ID
- POST /api/equitysimulations: Create a new equity simulation
- GET /api/equitysimulations: Get all equity simulations
- GET /api/equitysimulations/:id: Get an equity simulation by ID
- PUT /api/equitysimulations/:id: Update an equity simulation by ID
- DELETE /api/equitysimulations/:id: Delete an equity simulation by ID
- POST /api/taxcalculations: Create a new tax calculation
- GET /api/taxcalculations: Get all tax calculations
- GET /api/taxcalculations/:id: Get a tax calculation by ID
- PUT /api/taxcalculations/:id: Update a tax calculation by ID
- DELETE /api/taxcalculations/:id: Delete a tax calculation by ID
- POST /api/financialreports: Create a new financial report
- GET /api/financialreports: Get all financial reports
- GET /api/financialreports/:id: Get a financial report by ID
- PUT /api/financialreports/:id: Update a financial report by ID
- DELETE /api/financialreports/:id: Delete a financial report by ID
The project structure is organized as follows:
opencap/
├── controllers/ # Controllers for handling API requests
├── models/ # Mongoose models
├── routes/ # API routes
├── tests/ # Test cases
├── .env # Environment variables
├── .gitignore # Files to ignore in Git
├── db.js # Database connection
├── package.json # Project metadata and dependencies
├── README.md # Project documentation
Contributions are welcome! Please fork the repository and submit a pull request for any changes. This project follows a Test-Driven Development (TDD) approach, and all contributions should adhere to this coding style.
-
Fork the repository:
git fork https://github.com/Open-Cap-Stack/opencap.git
-
Create a new branch:
git checkout -b feature-branch
-
Write tests first:
- Ensure you write test cases for any new functionality or changes before writing the actual code.
- Place your tests in the
tests
directory.
-
Implement the functionality:
- Write the minimum amount of code required to pass the tests.
-
Run tests:
npm test
- Ensure all tests pass before committing your changes.
-
Commit your changes:
git commit -am 'Add new feature'
-
Push to your branch:
git push origin feature-branch
-
Create a Pull Request:
- Go to the repository on GitHub and create a pull request from your branch.
Follow these steps to submit your code changes:
-
Create a new branch:
git checkout -b feature/{story-id} # For features git checkout -b bug/{story-id} # For bugs git checkout -b chore/{story-id} # For chores
-
Make your changes:
- Ensure your code follows the coding standards (see below).
-
Write failing tests:
- Write tests that demonstrate the functionality is NOT already present.
- Make a WIP commit:
git add . git commit -m "WIP: Red Tests."
-
Implement code to pass the tests:
- Make WIP commits as you go, and commit code when your tests are green:
git add . git commit -m "WIP: Green Tests."
-
Refactor your code:
- Refactor to improve code quality. Re-run the tests and commit:
git add . git commit -m "Refactor complete."
-
Submit a pull request:
git push origin feature/{story-id} # Push your branch
- Go to the repository on GitHub and create a pull request from your branch to the main branch.
-
Review process:
- Review outstanding pull requests, comment on, approve and merge open pull requests, or request changes on any PRs that need improvement.
Please follow these coding standards to maintain code quality and consistency:
-
Indentation: Use 4 spaces for indentation.
-
Naming Conventions:
- Variables and functions: camelCase
- Classes and components: PascalCase
- Constants: UPPERCASE_SNAKE_CASE
-
Comments:
- Use JSDoc style comments for functions and classes.
Provide meaningful comments for complex code segments and functions.
-
Document any public APIs and classes with clear explanations of their purpose and usage.
-
Remove or update outdated comments as code changes.
-
Code Structure:
- Organize code into modules and components.
- Keep functions small and focused on a single task.
-
Linting: Ensure your code passes ESLint checks:
npm run lint
-
Testing:
-
Write unit tests using BDD-style frameworks like Mocha or Jasmine.
-
Follow the Arrange, Act, and Assert (AAA) pattern:
it('should correctly add two positive numbers', () => { // Arrange const num1 = 5; const num2 = 7; // Act const result = add(num1, num2); // Assert expect(result).to.equal(12); });
-
Write integration tests to validate interactions between different parts of the application.
-
Write functional tests to validate the application's functionality.
-
This project is licensed under the MIT License. See the LICENSE file for details.