{"id":35095018,"url":"https://github.com/stackpan/senopi","last_synced_at":"2026-04-19T06:44:49.051Z","repository":{"id":160460443,"uuid":"620679433","full_name":"stackpan/senopi","owner":"stackpan","description":"Spring-empowered Notes API","archived":false,"fork":false,"pushed_at":"2024-01-20T09:01:40.000Z","size":172,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-25T16:55:54.596Z","etag":null,"topics":["jwt","postgresql","rabbitmq","spring-boot"],"latest_commit_sha":null,"homepage":"","language":"Java","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/stackpan.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}},"created_at":"2023-03-29T06:52:04.000Z","updated_at":"2024-02-08T17:06:38.000Z","dependencies_parsed_at":"2024-01-07T10:43:01.467Z","dependency_job_id":"53046a93-5adf-4fcd-89cc-e4d72d604ac7","html_url":"https://github.com/stackpan/senopi","commit_stats":null,"previous_names":["stackpan/senopi"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/stackpan/senopi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackpan%2Fsenopi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackpan%2Fsenopi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackpan%2Fsenopi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackpan%2Fsenopi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stackpan","download_url":"https://codeload.github.com/stackpan/senopi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackpan%2Fsenopi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28080312,"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","status":"online","status_checked_at":"2025-12-27T02:00:05.897Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["jwt","postgresql","rabbitmq","spring-boot"],"created_at":"2025-12-27T15:12:35.260Z","updated_at":"2025-12-27T15:12:39.463Z","avatar_url":"https://github.com/stackpan.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Senopi\n\nDicoding notes app the backend project, but it's powered by Spring Boot.\n\n## Overview\n\nThis project was made using Spring Boot.\nLike general backend applications, it can process a request and send a\nresponse, store into a database,\nauthenticate request \u0026 authorize resource\n(we use [JWT](https://jwt.io/)), process queue job, send emails, store images, etc.\n\nFor the application feature, we build it according to\nthe [original project](https://github.com/dicodingacademy/a271-backend-menengah-labs).\n\n## Usage\n\nWe have documented the [OpenAPI spec](https://swagger.io/specification/) of the app.\nYou can\ncheck [here](https://github.com/stackpan/senopi/tree/main/docs).\n\n## Installation\n\n### Prerequisite:\n- JRE version 17 or later\n- Apache Maven\n\n1. Database setup\nYou can use PostgreSQL as database of this application. Make sure to set up the database name, username, and password. Once finished, configure this app by filling these keys in application configuration:\n```\nspring.datasource.url=jdbc:postgresql://\u003cyourpgserverhost\u003e:\u003cport\u003e/\u003cdbname\u003e\nspring.datasource.username=\nspring.datasource.password=\nspring.datasource.driver-class-name=org.postgresql.Driver\n```\nYou can follow the example file in [`application.yaml.example`](https://github.com/stackpan/senopi/blob/main/src/main/resources/application.yaml.example) file inside resource classpath\n\nAnd migrate the database. You can find the sql sample file [here](https://github.com/stackpan/senopi/blob/main/database.sql)\n\n2. AMQP server setup\nSenopi has a feature to exporting notes using queue job so it will require an AMQP server to fulfill this functionality. We have used RabbitMQ as AMQP server because it is easy to use. To configure AMQP server, fill these keys in application configuration:\n```\nspring.rabbitmq.host=\nspring.rabbitmq.port=\nspring.rabbitmq.username=\nspring.rabbitmq.password=\n```\n\nYou can follow the example file in [`application.yaml.example`](https://github.com/stackpan/senopi/blob/main/src/main/resources/application.yaml.example) file inside resource classpath\n\nAnd set up the consumer app that you can find [here](https://github.com/stackpan/senopi-consumer)\n\n3. JWT Secret\nFor security purpose this app need private and public key for generating JWT tokens. You can generate two `.pem` file as private and public key. And configure the app to locate the files location in application configuration:\n```\nrsa.private-key=\nrsa.public-key=\n```\n\nYou can follow the example file in [`application.yaml.example`](https://github.com/stackpan/senopi/blob/main/src/main/resources/application.yaml.example) file inside resource classpath\n\n4. Running the app\n\nOnce those setups above is finished. You can start the application:\n`mvn spring-boot:run`\n\n### Frontend Service\n\nTo install the frontend service,\nclone [this repository](https://github.com/stackpan/notes-client) and follow the instructions inside it.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstackpan%2Fsenopi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstackpan%2Fsenopi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstackpan%2Fsenopi/lists"}