{"id":24719592,"url":"https://github.com/binzcodes/assess-haven-bourne","last_synced_at":"2026-04-07T18:31:52.281Z","repository":{"id":101617594,"uuid":"346180955","full_name":"binzcodes/assess-haven-bourne","owner":"binzcodes","description":null,"archived":false,"fork":false,"pushed_at":"2021-04-12T13:13:57.000Z","size":362,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-03T14:30:02.160Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/binzcodes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-10T00:13:30.000Z","updated_at":"2022-02-06T15:44:14.000Z","dependencies_parsed_at":"2023-06-06T15:00:24.108Z","dependency_job_id":null,"html_url":"https://github.com/binzcodes/assess-haven-bourne","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/binzcodes/assess-haven-bourne","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/binzcodes%2Fassess-haven-bourne","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/binzcodes%2Fassess-haven-bourne/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/binzcodes%2Fassess-haven-bourne/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/binzcodes%2Fassess-haven-bourne/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/binzcodes","download_url":"https://codeload.github.com/binzcodes/assess-haven-bourne/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/binzcodes%2Fassess-haven-bourne/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31524524,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-27T11:18:27.908Z","updated_at":"2026-04-07T18:31:52.267Z","avatar_url":"https://github.com/binzcodes.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Simply run `docker-compose up`\n\n# Rationale\n\nSimple express app to serve, heavy lifting/data handling in database w/communication via TypeORM.\nData stored in Postgres, cached in redis to tolerate traffic.\nEnded up fairly feature-rich.\n\n## Data Store\nPostgres\n- Overkill, but most datastores would be for this batch\n- At this scale serving static would suffice but i don't think that would fit the brief.\n  Originally built this serving from file \u0026 wired in TypeORM/PG later.\n- Figure if I'm going overkill I might as well throw a cache in, so Redis\n\nOf the opinion that RDBMS are preferable to NoSQL store for relational data at any scale\nIdeally, I'd run this on FaunaDB for scale.\nFor this actual batch of data\n\nRedis\n- Intended as very-short-term cache to protect PG\n- set 30s for demo but would adjust per end-point (with .cache(time))\n\n## TypeORM\nFirst time using, have been looking for an opportunity to try it out!\nPlays better with TS than sequelize into a fair few minor bugs that required awkward workarounds.\nPerhaps not the best choice to demonstrate prog skills\n\n## Tests\n\nSadly, I can't get the test suite working. The issue is with setting up DB conn rather than writing the tests.\nApparent issue with hoisting the ORM (typeORM) entities/data model to the connection in the testing environment.\n\nI'm out of time for debugging and didn't get to writing tests properly.\n\nDatabase is doing all the heavy lifting regarding data shape so little else to test, too.\nHave roughed-in basic tests for integration-testing endpoints (which won't run).\nMocking would be a solution but not sure what would benefit.\n\n# More time?\n- Resolve issue with testing environment\n  - Next steps would be stackoverflow/gitter\n  - Meanwhile, mocking could suffice as no DB conn needed\n- Improve data loading\n  - Had to work around an aparent issue with typeORM\n  - Running loader on container build\n- Properly setup production environment/security\n- Move a few hard-coded opts to config\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbinzcodes%2Fassess-haven-bourne","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbinzcodes%2Fassess-haven-bourne","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbinzcodes%2Fassess-haven-bourne/lists"}