Synthetic Biology Laboratory Information Management System (LIMS)
๐กLessons Learned
- Gathering business requirements and scoping project feature development
- Prototyping Single Page Application User Interface in AdobeXD
- Creating new, meaningful SVG illustrations by combining and altering existing free SVG illustrations
- Architected SQL Database to Boyce-Codd Normal form in UML
- Using PostgreSQL with Django
- Implementing JSON Web Token authentication with Redis in Django
- Designing an API, especially in Django using django-rest-framework
- Implementing React Hooks
- Implementing complex state management in Redux
- Writing React and Redux in Typescript
- Integration testing React and Redux with Jest and react-testing-library
- End to end automation testing with Cypress
- Unit and Integration testing Django with pytest
- Behavioral Driven Testing: test the expected result, not the implementation details
- Implementing Test Driven Development: write tests as you go
- Implementing Domain Driven Development: start and finish features based on user stories
- Working with python virtual environment (virtualenv) for python dependency management
- Dockerizing the development environment for coordinating the following services: Django, PostgreSQL, Redis, and React
- Setting up linting with Prettier and Husky
- Setting up standardized commit messages with gitmoji
- Compressing files with Webpack and zipping files with brotli
๐ Technologies
Protoyping |
Graphic Design |
Front-End |
Back-End |
Database |
Deployment |
Testing |
Adobe XD |
Adobe XD |
React |
Python3 |
PostgreSQL |
Git |
Jest |
. |
Freepik |
Redux |
Django |
Redis |
circleci |
React Testing Library |
. |
. |
Typescript |
Django Rest Framework |
. |
Docker |
Cypress |
. |
. |
ES6 |
Celery |
. |
Kubernetes |
PyTest |
. |
. |
React Router |
. |
. |
AWS Lambda |
. |
. |
. |
Formik |
. |
. |
AWS Aurora |
. |
. |
. |
Styled Components |
. |
. |
AWS API Gateway |
. |
. |
. |
Material UI |
. |
. |
. |
. |
- note that italicized text indicates that the technology has not been applied yet
โ๏ธ Methodology
- Single Page Application for a better user experience.
- Separated front-end and back-end to avoid a monolithic architecture and to lay the foundation of a microservices architecture.
- Microservices architecture for decoupled business logic and more flexibility for adaptations in the future.
- React for front-end for the component-based approach to writing code, one-way data flow, and virtual document-object-model (DOM). Chose React over Angular and Vue since I have the most experience with React.
- Redux for managing state in React since this is a large application and managing React states would become unweidly in the long run.
- React and Redux both written in Typescript to leverage static typing for a more secure and well-tested application.
- Styled Components for styling for leveraging the power and benefits of CSS-in-JS.
- Django RESTful API for back-end. Django-rest-framework to simplify Create, Read, Update, and Delete routes. I've built a Django REST API without the help of a framework and there are no benefits to building routes at a lower level.
- Celery for asynchronous operations within Python since Django asynchronous support is still just for views (as of v3.1).
- SQL Database for leveraging the benefits of relational databases
- PostgreSQL as the Relational Database Management System (RDBMS) since it has more features integrations in Django
- Docker containerization of the application while in development mode because there are four different services and docker-compose provides automation for starting and ending the services.
- circleci for continuous integration and continuous delivery since I have the most experience with circleci. Considered using Jenkins, but my focus as a Web Developer is not DevOps.
โ๏ธ Features
- Manage user groups
- Manage chemical/biological inventory
- Manage protocols
- Manage projects (made up of protocols)
- Manage jobs (completing the protocol in a project)
- Manage products (output from a job)
๐ Tests
- Interactive code coverage diagram on codecov. The code coverage takes into account both the Django unit tests and the React unit/integration tests.
-
Django unit and the React unit/integration junit.xml test reports and code coverage artifacts automatically uploaded to circleci.
๐ Getting Started
System requirements:
- Make sure you have PostgreSQL installed and running on your computer. If you installed PostgreSQL with Homebrew, then you can start PostgreSQL with
brew services start postgresql
- Make sure you have Redis installed and running on your computer. If you installed Redis with Homebrew, then you can start Redis with
brew services start redis
- Create an .env file in the root directory with the following key:
ENV_API_SERVER=http://127.0.0.1
- Create an .env file in the django-backend directory with the following keys:
DJANGO_ENV=
DEBUG=
SECRET_KEY=
DJANGO_ALLOWED_HOSTS=www.example.com localhost 127.0.0.1 [::1]
DJANGO_ADMIN_USER=
DJANGO_ADMIN_EMAIL=
DJANGO_ADMIN_PASSWORD=
DATABASE=postgres
DB_DATABASE=db.postgresql
DB_USER=postgres_user
DB_PASSWORD=
DB_HOST=
DB_PORT=5432
JWT=
REDIS_URL=
- Create an .env file in the postgres directory with the following keys:
POSTGRES_USER=
POSTGRES_PASSWORD=
To run this project on your system with Docker:
โ ๏ธ Important: if you are getting conflict errors, you should run docker stop <container name>
that is already running in the background.
โ ๏ธ Important: if you are getting other errors, you should run docker-compose down
to bring everything down, and start over.
To run this project on your system manually (without Docker):
To contribute to this project on your system:
- Ensure that
git lfs
is installed on your system. Download the extension here git-lfs.github.com.
- To make git commits, navigate to the root directory, add files to git staging with
git add <path/to/file>
, and then run git commit
to activate the Gitmoji interactive prompt in your terminal. Here's a preview of the interactive prompt. After completing the prompt, exit with :wq
- If making README.md updates, be sure to add
[skip ci]
to the git commit message in order to prevent running unneccessary tests in continuous integration and deployment.
๐ License
Copyright Notice and Statement: currently not offering any license. Permission only to view and download. Refer to choose a license for more info.