{"id":41499733,"url":"https://github.com/ristekoss/susunjadwal-backend","last_synced_at":"2026-01-23T19:03:45.893Z","repository":{"id":37416569,"uuid":"413543575","full_name":"ristekoss/susunjadwal-backend","owner":"ristekoss","description":"SusunJadwal - Universitas Indonesia's #1 Student Course Planner App.","archived":false,"fork":false,"pushed_at":"2025-08-06T05:23:57.000Z","size":184,"stargazers_count":687,"open_issues_count":14,"forks_count":11,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-06T07:14:16.787Z","etag":null,"topics":["docker-compose","hacktoberfest","ristek-csui","student-project","universitas-indonesia"],"latest_commit_sha":null,"homepage":"http://susunjadwal.cs.ui.ac.id/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ristekoss.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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,"zenodo":null}},"created_at":"2021-10-04T18:41:40.000Z","updated_at":"2025-08-06T05:24:01.000Z","dependencies_parsed_at":"2025-07-28T21:11:34.722Z","dependency_job_id":"58cbd00f-3fb2-42f1-9a75-ba4341c3a1d2","html_url":"https://github.com/ristekoss/susunjadwal-backend","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ristekoss/susunjadwal-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ristekoss%2Fsusunjadwal-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ristekoss%2Fsusunjadwal-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ristekoss%2Fsusunjadwal-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ristekoss%2Fsusunjadwal-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ristekoss","download_url":"https://codeload.github.com/ristekoss/susunjadwal-backend/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ristekoss%2Fsusunjadwal-backend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28698345,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T17:25:48.045Z","status":"ssl_error","status_checked_at":"2026-01-23T17:25:47.153Z","response_time":59,"last_error":"SSL_read: 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":["docker-compose","hacktoberfest","ristek-csui","student-project","universitas-indonesia"],"created_at":"2026-01-23T19:03:45.803Z","updated_at":"2026-01-23T19:03:45.870Z","avatar_url":"https://github.com/ristekoss.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Susun Jadwal\n\nSusun Jadwal is an open source tool to plan class schedules for university students, \ndeveloped by Ristek Fasilkom UI. https://susunjadwal.cs.ui.ac.id/\n\nIn the spirit of Open Source Software, *everyone* is welcome to contribute to Susun Jadwal! \nSee the Contributing Guide below for more.\n\n## Structure\n\n```\napp/                    // general views\nmodels/                 // mongoDB models\nscraper/                // courses (academic.ui.ac.id) scraper\nsso/                    // SSO UI authentication logic\nrequirements.txt        // python dependency list\nscripts/                // (utility scripts)\n├── init-mongo.sh       // script to create non-root mongoDB user\n├── launch.sh           // main script to start flask\n├── mongo_dump.sh       // script to dump mongoDB data to .dump file\n└── start.sh            // alternative script to start flask\n.env.example            // template for .env file\ndev.docker-compose.yml  // docker-compose for mongo and rmq\ndocker-compose.yml      // docker-compose for mongo, rmq, \u0026 server\n```\n\n## Contributing Guide\n\n*Everyone* is welcome to contribute to Susun Jadwal!\nFeel free to make a contribution by submitting a pull request.\nYou can also report bugs and request features / changes by creating a new \n[Issue](https://github.com/ristekoss/susunjadwal-backend/issues/new).\n\nFor in-depth discussion, please join RistekOSS's Discord.\n\n## Development\n\n### Requirements\n\n1. `python` (tested on 3.6 and 3.9.18), and `pip`\n2. `docker`\n\n### Installing\n\nThe following steps will assume you have already set up a python virtual environment, \nand will use `dev.docker-compose.yml`. \n\n1. Boot up MongoDB and RabbitMQ: \n    ```docker-compose -f dev.docker-compose.yaml up```\n\n2. Populate `.env`, using `.env.example` as reference.\n\n3. Connect to MongoDB and create a non-root user.\n    ```\n    mongosh -u \u003croot-username\u003e\n    // enter password when prompted\n    \n    use \u003cdb_name\u003e;\n    db.createUser({user: \"\u003cMONGODB_USERNAME\u003e\", pwd: \"\u003cMONGODB_PASSWORD\u003e\", roles: [\"readWrite\"]});\n    // response should be '{ok: 1}', use these credentials in your .env secrets\n    ```\n\n4. Boot up the Flask server:\n    ```export PORT=8000 \u0026\u0026 bash scripts/launch.sh```\n\n5. Ping the API: `http://localhost:8000/susunjadwal/api/`\n\n### Containerizing the Server\n\n#### For Local\n\n1. Populate `.env`.\n\n2. Run `docker-compose.yml`.\n\n#### For Deployment\n\nWhile RISTEK uses a different standardized workflow, here is a general guide on deploying.\n\n1. Populate `.env`.\n\n2. Replace line 23-25 in `docker-compose.yml` to pull from [Docker Hub](https://hub.docker.com/r/ristekoss/):\n\n```image: ristekoss/susunjadwal-backend:stable```\n\n3. Modify the credentials in `MONGO_INITDB_XX` environment variables.\n\n4. `docker compose up`\n\n\n\n## Dump and Restore Database\n\n### Dump\n1. Run the dump script: `bash mongo_dump.sh`\n2. The result will be a `.dump` file in the directory `./mongodump`.\n\n### Restore\n1. Copy dump file to MongoDB Container: `docker cp \u003cpath_to_dump_file\u003e susunjadwalbackend_mongo_1:/\u003cpath_to_dump_file\u003e`\n2. Load dump into DB: `docker exec -it \u003cmongo_container_name\u003e mongorestore -u \u003croot_username\u003e --archive=\u003cfile.dump\u003e`\n3. Enter `\u003croot_username\u003e`'s password when prompted.\n4. You should see the success message: `XX documents successfully restored.`\n\n## Deployment\n\nWe use a standardized pipeline for all our products which we invoke from `.github/workflows/deploy-\u003cenv\u003e.yaml`\n\n## Legacy Version\n\nTo see the version of `susunjadwal-backend` which was maintained and deployed up until 2023, see [5b8f710](https://github.com/ristekoss/susunjadwal-backend/tree/5b8f71068b62a0f1f684c616cb8e40c087861725).\n\n## License\n\nSee LICENSE.md. This software actually goes a long way back, thank you so much to everyone involved.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fristekoss%2Fsusunjadwal-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fristekoss%2Fsusunjadwal-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fristekoss%2Fsusunjadwal-backend/lists"}