Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Arvinje/meetinger
A Serverless Meetup management app, built with TypeScript to showcase Domain-Driven Design (DDD), Clean Architecture & SOLID best practices
https://github.com/Arvinje/meetinger
architecture clean-architecture cognito ddd domain-driven-design dynamodb serverless ses sns solid terraform typescript
Last synced: 7 days ago
JSON representation
A Serverless Meetup management app, built with TypeScript to showcase Domain-Driven Design (DDD), Clean Architecture & SOLID best practices
- Host: GitHub
- URL: https://github.com/Arvinje/meetinger
- Owner: Arvinje
- License: mit
- Created: 2020-10-23T20:16:33.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2021-11-24T12:20:57.000Z (almost 3 years ago)
- Last Synced: 2024-08-01T19:58:54.443Z (3 months ago)
- Topics: architecture, clean-architecture, cognito, ddd, domain-driven-design, dynamodb, serverless, ses, sns, solid, terraform, typescript
- Language: TypeScript
- Homepage:
- Size: 2.24 MB
- Stars: 5
- Watchers: 0
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Meetinger
[![CI](https://github.com/Arvinje/meetinger/actions/workflows/CI.yml/badge.svg)](https://github.com/Arvinje/meetinger/actions/workflows/CI.yml)
> A Serverless Meetup management app, built with TypeScript to showcase Domain-Driven Design (DDD), Clean Architecture & SOLID best practices.
This started as an exercise for me to practice the principles of Domain-Driven Design in a TypeScript-written app. Additionally, I tried to up my game in DynamoDB single table design.
## The Stack
- A Serverless app, designed to be deployed on AWS infrastructure
- TypeScript on NodeJS
- DynamoDB as the primary database, with a single table design from the start
- Infrastructure configured via Terraform (IaC)
- Amazon Cognito for authentication
- Amazon Simple Notification Service (SNS) as the message broker service
- Amazon Simple Queue Service (SQS) for message queues
- Amazon Simple Email Service (SES) for transactional emails## How to deploy
First start by deploying the infrastructure using Terraform. In `infrastructure` directory, under the desired environment sub directory, simply run:`terraform init && terraform apply`
The Serverless stack can be deployed similarly by running `sls deploy` in `backend` directory.
## Testing
Simply run `yarn test` in the `backend` directory to run all automated tests. This code base utilizes auto-generated fake data for testing using Faker.js. Faker.js supports configurable seed number which can be used to achieve consistent result. You can use `FAKER_SEED` environment variable to set your own seed. e.g. `FAKER_SEED=123 yarn test`## DynamoDB Data Model
For more information on the data model, including examples, refer to the [DynamoDB Table Design document.](dynamodb)## Roadmap
The work on this project is not done yet. Here are some things that I consider to implement in the future:- [ ] Better error messages
- [ ] Expand the API to include more usecases
- [ ] Add a frontend## Credits
This app is highly influenced by the articles and the SOLID book by [Khalil Stemmler](https://khalilstemmler.com). On this journey, I've also enjoyed many articles on practical DDD by [Vaughn Vernon](https://vaughnvernon.co).## License
> Copyright (c) 2020 Arvin Jenabi (arvinjenabi.com)Meetinger is released under [the MIT license](LICENSE).