{"id":13507352,"url":"https://github.com/CaptainFact/captain-fact-api","last_synced_at":"2025-03-30T08:30:30.354Z","repository":{"id":31887817,"uuid":"145715978","full_name":"CaptainFact/captain-fact-api","owner":"CaptainFact","description":"🔎 CaptainFact - API. The one that serves and process all the data for https://captainfact.io","archived":false,"fork":false,"pushed_at":"2024-10-16T06:00:51.000Z","size":4420,"stargazers_count":188,"open_issues_count":28,"forks_count":26,"subscribers_count":10,"default_branch":"staging","last_synced_at":"2024-10-30T05:43:05.684Z","etag":null,"topics":["absinthe","elixir","graphql","hacktoberfest","phoenix"],"latest_commit_sha":null,"homepage":"","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CaptainFact.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2018-08-22T13:52:31.000Z","updated_at":"2024-10-09T17:53:06.000Z","dependencies_parsed_at":"2023-01-14T20:15:40.353Z","dependency_job_id":"c5e8c9da-6f22-428f-b878-935f60602b35","html_url":"https://github.com/CaptainFact/captain-fact-api","commit_stats":{"total_commits":780,"total_committers":17,"mean_commits":45.88235294117647,"dds":0.2628205128205128,"last_synced_commit":"7b6e999c09720f8938e7970520bad879c67979ed"},"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CaptainFact%2Fcaptain-fact-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CaptainFact%2Fcaptain-fact-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CaptainFact%2Fcaptain-fact-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CaptainFact%2Fcaptain-fact-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CaptainFact","download_url":"https://codeload.github.com/CaptainFact/captain-fact-api/tar.gz/refs/heads/staging","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246093582,"owners_count":20722480,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["absinthe","elixir","graphql","hacktoberfest","phoenix"],"created_at":"2024-08-01T02:00:31.864Z","updated_at":"2025-03-30T08:30:29.476Z","avatar_url":"https://github.com/CaptainFact.png","language":"Elixir","funding_links":["https://opencollective.com/captainfact_io","https://opencollective.com/captainfact_io/donate"],"categories":["Applications","Elixir"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/28169525?s=200\u0026v=4\" height=\"100\"/\u003e\u003c/p\u003e\n\u003ch1 align=\"center\"\u003e\u003ca href=\"https://captainfact.io\"\u003eCaptainFact.io\u003c/a\u003e\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://discord.captainfact.io\" title=\"Discord\"\u003e\u003cimg src=\"https://discordapp.com/api/guilds/416782744748687361/widget.png\" alt=\"Discord\"\u003e\u003c/a\u003e\n\u003ca href=\"https://twitter.com/CaptainFact_io\" title=\"Twitter\"\u003e\u003cimg src=\"https://img.shields.io/twitter/follow/CaptainFact_io.svg?style=social\u0026label=Follow\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/captainfact_io\" title=\"Backers on Open Collective\"\u003e\u003cimg src=\"https://opencollective.com/captainfact_io/backers/badge.svg\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\u003ca href=\"./LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/CaptainFact/captain-fact-api.svg\" alt=\"AGPL3\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/CaptainFact/captain-fact-api/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/CaptainFact/captain-fact-api\" alt=\"GitHub release\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/CaptainFact/captain-fact-api/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/CaptainFact/captain-fact-api/actions/workflows/ci.yml/badge.svg?branch=staging\" alt='CI Status' /\u003e\u003c/a\u003e\n\u003ca href='https://coveralls.io/github/CaptainFact/captain-fact-api?branch=staging'\u003e\u003cimg src='https://coveralls.io/repos/github/CaptainFact/captain-fact-api/badge.svg?branch=staging' alt='Coverage Status' /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003chr/\u003e\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://opencollective.com/captainfact_io/donate\" target=\"_blank\"\u003e\n  \u003cimg src=\"https://opencollective.com/captainfact_io/donate/button@2x.png?color=white\" width=300 /\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\u003chr/\u003e\n\u003cbr/\u003e\n\n# Install \u0026 Run\n\n## Prerequisites\n\nYou need to install Elixir. We recommand using [asdf-vm](https://github.com/asdf-vm/asdf#setup).\nCheck their documentation on how to install it, then run `asdf install` from\nroot `captain-fact-api` folder.\n\n## Start DB\n\nCreate / launch a PostgreSQL instance on your local machine. If you have\nDocker installed, you can use the pre-Seed PostgreSQL Docker image:\n\n`docker run -d --name cf_dev_db -p 5432:5432 captainfact/dev-db:latest`\n\n## Start API\n\n- `mix deps.get` --\u003e Get dependencies\n- `mix ecto.create` --\u003e Create DB\n- `mix ecto.migrate` --\u003e Migrate DB\n- `iex -S mix` --\u003e Start project\n\nFollowing services will be started:\n\n- [localhost:4000](http://localhost:4000) - REST API\n- [localhost:4001](https://localhost:4001) - REST API (HTTPS)\n- [localhost:4002](http://localhost:4002) - GraphQL API\n- [localhost:4003](https://localhost:4003) - GraphQL API (HTTPS)\n- [localhost:4004](http://localhost:4004) - Atom feed\n\nYou can also see all e-mail sent, by going to http://localhost:4000/\\_dev/mail\n\n## Other useful commands\n\n- `mix test` --\u003e Run tests\n- `mix test.watch` --\u003e Run test watcher\n- `mix format` --\u003e Format code\n- `mix ecto.gen.migration [migration_name]` --\u003e Generate migration\n\n# Project architecture\n\nThis application is organized as an [umbrella project](https://elixir-lang.org/getting-started/mix-otp/dependencies-and-umbrella-apps.html) which allows us to divide CaptainFact API into small apps.\n\n```\n.\n├── apps\n│   ├── cf =\u003e Core functions as a library. **Not deployed**\n│   ├── cf_atom_feed =\u003e Atom feed.\n│   ├── cf_graphql =\u003e GraphQL API (public).\n│   ├── cf_jobs =\u003e Jobs.\n│   ├── cf_rest_api =\u003e REST/WS API (private).\n│   └── db =\u003e DB repository and schemas **Not deployed**\n│       ├── lib\n│       │   ├── db\n│       │   ├── db_schema =\u003e Contains all the schemas (Video, Speaker, Comment…etc)\n│       │   ├── db_type =\u003e Special types (SpeakerPicture…etc.)\n│       │   └── db_utils =\u003e Some utility functions\n│       └── priv\n│           └── repo/migrations =\u003e All DB migrations files\n├── README.md =\u003e You're reading it right now. Are you?\n├── rel =\u003e Release configs \u0026 tools\n│   ├── commands =\u003e Commands that will be available to run on the release (seed DB…etc.)\n│   ├── hooks =\u003e Some hooks for automatically run commands when release run.\n│   ├── runtime_config =\u003e Runtime configurations for all apps.\n│   └── config.exs =\u003e Release configuration.\n```\n\n# Linked projects\n\n- [Community discussions and documentation](https://github.com/CaptainFact/captain-fact/)\n- [Front-end](https://github.com/CaptainFact/captain-fact-frontend)\n- [Extension](https://github.com/CaptainFact/captain-fact-extension)\n- [Overlay injector](https://github.com/CaptainFact/captain-fact-overlay-injector)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCaptainFact%2Fcaptain-fact-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FCaptainFact%2Fcaptain-fact-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCaptainFact%2Fcaptain-fact-api/lists"}