{"id":23410007,"url":"https://github.com/rulanugrh/phabos","last_synced_at":"2025-04-09T02:40:37.226Z","repository":{"id":255525817,"uuid":"847380240","full_name":"rulanugrh/phabos","owner":"rulanugrh","description":"Example Implementation Project Integration with Firestore and Tripay","archived":false,"fork":false,"pushed_at":"2024-09-07T19:05:52.000Z","size":230,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-14T21:00:03.149Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/rulanugrh.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":"2024-08-25T16:58:15.000Z","updated_at":"2024-12-25T08:02:26.000Z","dependencies_parsed_at":"2024-09-05T23:28:00.433Z","dependency_job_id":null,"html_url":"https://github.com/rulanugrh/phabos","commit_stats":null,"previous_names":["rulanugrh/phabos"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rulanugrh%2Fphabos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rulanugrh%2Fphabos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rulanugrh%2Fphabos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rulanugrh%2Fphabos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rulanugrh","download_url":"https://codeload.github.com/rulanugrh/phabos/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247968268,"owners_count":21025795,"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":[],"created_at":"2024-12-22T16:15:32.541Z","updated_at":"2025-04-09T02:40:37.208Z","avatar_url":"https://github.com/rulanugrh.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![github](https://raw.githubusercontent.com/D3Ext/aesthetic-wallpapers/main/images/chill.gif)\n\n## Getting Started\n\nfirst you must clone this project\n\n```bash\n$ git clone https://github.com/rulanugrh/phabos\n```\n\nafter that, don't forget to copy file `.env.example` to `.env`\n\n```bash\n$ cp .env.example .env\n# edit file, you must login to https://tripay.co.id for get api key\n```\n\nyou must download your `key.json` from [firestore](https://console.firebase.google.com/u/0/project/project-freelance-a/settings/serviceaccounts/adminsdk) and copy into folder `config`, last one you can install package and running this project\n\n```bash\n$ npm i\n$ npm run dev # for development\n$ npm run build \u0026\u0026 npm run start # for production\n```\n\nif you have docker you can install with this command\n\n```bash\n$ docker compose up -d .\n```\n\n\u003ca name=\"documentation-top\"\u003e\u003c/a\u003e\n\n## Documentation API\n\nThis contain all documentation about API default port in `http://ip:3000` :\n\n- [Public](#public)\n    - [Register](#user-register)\n    - [Login](#user-login)\n    - [Callback Tripay](#callback-tripay)\n- [Admin](#admin)\n    - [Product Register](#product-register)\n    - [Product Update](#product-update)\n    - [Product Delete](#product-delete)\n    - [Product Count](#product-count)\n    - [User Count](#user-count)\n    - [Order Get All](#order-get-all)\n    - [Order Get Total Income](#order-total-income)\n    - [Order Get Today Income](#order-today-income)\n    - [Order Accept](#accept-order)\n    - [Get All Topup](#get-all-topup-by-admin)\n    - [Send Product](#send-product)\n- [Member / User](#member--user)\n    - [GetMe](#get-user)\n    - [Update Password](#update-password)\n    - [Product Get All](#get-all-product)\n    - [Product Get By ID](#get-product-by-id)\n    - [Product By Name](#get-product-by-name)\n    - [Order Register](#create-order-request)\n    - [History Order](#get-all-order-by-userid)\n    - [Get Order By ID](#get-order-by-id)\n    - [Cancel Order](#cancel-order-by-id)\n    - [Topup Request](#topup-register)\n    - [Topup Get All](#get-all-order-by-userid)\n    - [Topup Get By ID](#get-topup-by-id)\n    - [Count Bonus](#count-bonus)\n\n### Public\n\n#### User Register\n\n```http\nPOST /api/auth/register\n```\n\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n- Body:\n\n```json\n{\n    \"name\": \"string, required\",\n    \"email\": \"string, required\",\n    \"password\": \"string, min 8\",\n    \"phone_number\": \"string, required\"\n}\n```\n\n- Response\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": {\n        \"name\": \"string\",\n        \"email\": \"string\"\n    }\n}\n```\n\n#### User Login\n\n```http\nPOST /api/auth/login\n```\n\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n- Body:\n\n```json\n{\n    \"email\": \"string, required\",\n    \"password\": \"string, requird\"\n}\n```\n\n- Response\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": {\n        \"token\": \"string\",\n        \"name\": \"string\"\n    }\n}\n```\n\n#### Callback Tripay\n\n```http\nPOST /api/tripay/callback\n```\n\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\"\n}\n```\n\n### Admin\nRequired `Authorization` header and this is must valid email in `.env` file\n\n#### Product Register\n```http\nPOST /api/product/register\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n- Body: \n```json\n{\n    \"name\": \"string\",\n    \"description\": \"string\",\n    \"price\": \"number, min 10000\",\n    \"process\": \"string\",\n    \"stock\": \"number, min 1\"\n}\n```\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": {\n        \"product_name\": \"string\",\n        \"process\": \"string\",\n        \"price\": \"number\",\n        \"stock\": \"number\",\n        \"category\": \"string\"\n    }\n}\n```\n#### Product Update\n```http\nPUT /api/product/update/:id\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n- Parameter:\n  - id: `string`\n- Body: \n```json\n{\n    \"name\": \"string\",\n    \"description\": \"string\",\n    \"price\": \"number, min 10000\",\n    \"process\": \"string\",\n    \"stock\": \"number, min 1\"\n}\n```\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": {\n        \"product_name\": \"string\",\n        \"process\": \"string\",\n        \"price\": \"number\",\n        \"stock\": \"number\",\n        \"category\": \"string\"\n    }\n}\n```\n#### Product Delete\n```http\nDELETE /api/product/delete/:id\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n- Parameter:\n  - id: `string`\n\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\"\n}\n```\n#### Product Count\n```http\nGET /api/product/count\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"total_product\": \"string\"\n}\n```\n\n#### Order Total Income\n```http\nGET /api/order/income/total\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"total_income\": \"string\"\n}\n```\n#### Order Today Income\n```http\nGET /api/order/income/today\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"total_income\": \"string\"\n}\n```\n#### Order Get All\n```http\nGET /api/order/admin/get\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": [\n        {\n            \"id\": \"string\",\n            \"via\": \"string\",\n            \"user_name\": \"string\",\n            \"category\": \"string\",\n            \"product_name\": \"string\",\n            \"tanggal\": \"string\",\n            \"status\": \"string\",\n            \"process\": \"string\",\n            \"total\": \"string\",\n            \"checkout_url\": \"string\"\n        }\n    ]\n}\n```\n#### User Count\n```http\nGET /api/auth/count\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"total_user\": \"string\"\n}\n```\n#### Accept Order\n```http\nPUT /api/order/update/status/:id\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n- Paremeter:\n  - id: `string`\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\"\n}\n```\n#### Send Product\n```http\nPOST /api/order/send/product/:id\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n- Paremeter:\n  - id: `string` -\u003e order id\n- Body:\n```json\n{\n    \"expired\": \"string\",\n    \"account\": \"string\",\n    \"password\": \"string\",\n    \"rules\": \"string\"\n}\n```\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\"\n}\n```\n#### Get All Topup By Admin\n```http\nGET /api/topup/admin/get\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": [\n      {  \n          \"id\": \"string\",\n          \"via\": \"string\",\n          \"balance\": \"string\",\n          \"tanggal\": \"string\",\n          \"status\": \"string\",\n          \"user_name\": \"string\"\n      }\n    ]\n}\n```\n\n### Member / User\nRequired `Authorization` header you must login first if you want access this page\n\n#### Get User\n```http\nGET /api/auth/getme\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": {\n        \"_id\": \"string\",\n        \"name\": \"string\",\n        \"email\": \"string\",\n        \"amount\": \"number\"\n    }\n}\n```\n#### Update Password\n```http\nPUT /api/auth/update/password\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n\n- Body: \n```json\n{\n    \"password\": \"string\"\n}\n```\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\" \n}\n```\n\n#### Get All Product\n```http\nGET /api/product/\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": [\n        {\n            \"id\": \"string\",\n            \"product_name\": \"string\",\n            \"process\": \"string\",\n            \"price\": \"number\",\n            \"stock\": \"number\",\n            \"category\": \"string\",\n            \"description\": \"string\"\n        }\n    ] \n}\n```\n#### Get Product By ID\n```http\nGET /api/product/find/:id\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n- Parameter\n  - id: `string`\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": {\n        \"id\": \"string\",\n        \"product_name\": \"string\",\n        \"process\": \"string\",\n        \"price\": \"number\",\n        \"stock\": \"number\",\n        \"category\": \"string\",\n        \"description\": \"string\"\n    }\n}\n```\n#### Get Product By Name\n```http\nGET /api/product/get?name=string\u0026category=string\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n- Query\n  - name: `string`\n  - category: `string`\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": [\n        {\n            \"id\": \"string\",\n            \"product_name\": \"string\",\n            \"process\": \"string\",\n            \"price\": \"number\",\n            \"stock\": \"number\",\n            \"category\": \"string\",\n            \"description\": \"string\"\n        }\n    ]\n}\n```\n#### Count Bonus\n```http\nGET /api/order/bonus?amount=number\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n- Query\n  - amount: `string`\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": \"number\"\n}\n```\n#### Create Order Request\n```http\nPOST /api/order/register\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n- Body: \n```json\n{\n    \"product_id\": \"string\",\n    \"via\": \"string\",\n    \"jumlah\": \"number, min 1\"\n}\n```\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": {\n        \"product_name\": \"string\",\n        \"product_price\": \"string\",\n        \"quantity\": \"number\",\n        \"total\": \"number\",\n        \"checkout_url\": \"string\",\n        \"status\": \"string\"\n    }\n}\n```\n#### Get All Order By UserID\n```http\nGET /api/order/history\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": [\n        {\n            \"id\": \"string\",\n            \"via\": \"string\",\n            \"category\": \"string\",\n            \"product_name\": \"string\",\n            \"tanggal\": \"string\",\n            \"status\": \"string\",\n            \"process\": \"string\",\n            \"total\": \"string\",\n        }\n    ]\n}\n```\n#### Get Order By ID\n```http\nGET /api/order/find/:id\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n- Paremeter:\n  - id: `string`\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": {\n        \"via\": \"string\",\n        \"order_date\": \"string\",\n        \"order_status\": \"string\",\n        \"product_name\": \"string\",\n        \"product_account\": \"string\",\n        \"product_price\": \"string\",\n        \"product_expired\": \"string\",\n        \"product_rules\": \"string\",\n        \"product_password\": \"string\",\n    }\n}\n```\n\n#### Cancel Order By ID\n```http\nDELETE /api/order/cancel/:id\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n- Paremeter:\n  - id: `string`\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\"\n}\n```\n#### Get Topup By ID\n```http\nGET /api/topup/find/:id\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n- Paremeter:\n  - id: `string`\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": {\n        \"id\": \"string\",\n        \"via\": \"string\",\n        \"balance\": \"string\",\n        \"tanggal\": \"string\",\n        \"status\": \"string\"\n    }\n}\n```\n#### History Topup\n```http\nGET /api/topup/history\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": [\n      {  \n          \"id\": \"string\",\n          \"via\": \"string\",\n          \"balance\": \"string\",\n          \"tanggal\": \"string\",\n          \"status\": \"string\"\n      }\n    ]\n}\n```\n#### Topup Register\n```http\nPOST /api/topup/register\n```\n- Header:\n  - Content-Type: `application/json`\n  - Accept: `application/json`\n  - Authorization: `token`\n\n- Body: \n```json\n{\n    \"balance\": \"number\",\n    \"via\": \"string\"\n}\n```\n- Response:\n\n```json\n{\n    \"code\": \"number\",\n    \"msg\": \"string\",\n    \"data\": {\n      \"id\": \"string\",\n      \"via\": \"string\",\n      \"balance\": \"string\",\n      \"checkout_url\": \"string\",\n      \"status\": \"string\"\n    }\n}\n```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#documentation-top\"\u003eback to documentation\u003c/a\u003e)\u003c/p\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frulanugrh%2Fphabos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frulanugrh%2Fphabos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frulanugrh%2Fphabos/lists"}