{"id":19090186,"url":"https://github.com/jefedcreator/memoer","last_synced_at":"2026-04-06T08:32:28.541Z","repository":{"id":118308087,"uuid":"603088135","full_name":"jefedcreator/memoer","owner":"jefedcreator","description":" A nodejs express server application for note keeping and task tracking, with scheduled daily email reminders","archived":false,"fork":false,"pushed_at":"2025-01-10T14:30:31.000Z","size":259,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-16T14:54:54.940Z","etag":null,"topics":["expressjs","mysql","nodejs","nodemailer","prisma","typedi","typescript"],"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/jefedcreator.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,"zenodo":null}},"created_at":"2023-02-17T15:39:18.000Z","updated_at":"2025-02-04T20:05:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"26ea6f2b-e360-4f4e-932e-eefe282f5b9a","html_url":"https://github.com/jefedcreator/memoer","commit_stats":null,"previous_names":["jefedcreator/memoer"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jefedcreator/memoer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jefedcreator%2Fmemoer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jefedcreator%2Fmemoer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jefedcreator%2Fmemoer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jefedcreator%2Fmemoer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jefedcreator","download_url":"https://codeload.github.com/jefedcreator/memoer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jefedcreator%2Fmemoer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31464604,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T21:22:52.476Z","status":"online","status_checked_at":"2026-04-06T02:00:07.287Z","response_time":112,"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":["expressjs","mysql","nodejs","nodemailer","prisma","typedi","typescript"],"created_at":"2024-11-09T03:02:59.228Z","updated_at":"2026-04-06T08:32:28.512Z","avatar_url":"https://github.com/jefedcreator.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Memoer\n\nA nodejs express server application for a note keeping, with scheduled daily email reminders\n\n# Table of Contents\n\n[Intoduction](#Introduction)\n\n[Local development](#local-development)\n\n[Docker](#docker)\n\n[Testing](#testing)\n\n## Introduction\n\ncommitting to a to-do list or an important note can be a hassle, especially if you run on a very busy schedule. Memoer helps to solve the issue of forgetting an important action or task to be carried out. It is a Node.js, Express with mySQL database application that helps users capture their thoughts and allows them to add notes and lists. Additionally, it provides daily email reminders for incomplete tasks based on the priority you set while creating a note. Email reminders for high-priority notes are sent every 8 hours, medium-priority notes every 16 hours, and low-priority notes every 24 hours.\n\nMySQL database server is open-source database software that is faster, secured, reliable and cheaper because of its unique storage engine architecture. ​\n\n## API Documentation\n\nThis is the documentation for the REST API built using Express.js. The API is used for a note-keeping application that requires users to sign up and log in to access the service.\n\n### Instructions\n\nGetting Started\nTo get started with the API, follow these steps:\n\n1. Clone the repository onto your local machine using git clone https://github.com/jefedcreator/memoer.git.\n\n2. Run `yarn install` to install all the required dependencies.\n\n3. Run `yarn start` to start the server.\n\nThe server will be available at http://localhost:8000/api/v1/\n\n# 🚀 Get started here\n\nThis template guides you through CRUD operations (GET, POST, PUT, DELETE), variables, and tests.\n\n## 🔖 **How to use this template**\n\n#### **Step 1: Send requests**\n\nRESTful APIs allow you to perform CRUD operations using the POST, GET, PUT, and DELETE HTTP methods.\n\nThis collection contains each of these [request](https://learning.postman.com/docs/sending-requests/requests/) types. Open each request and click \"Send\" to see what happens.\n\n#### **Step 2: View responses**\n\nObserve the response tab for status code (200 OK), response time, and size.\n\n#### **Step 3: Send new Body data**\n\nUpdate or add new data in \"Body\" in the POST request. Typically, Body data is also used in PUT request.\n\n```\n{\n    \"name\": \"Add your name in the body\"\n}\n\n```\n\n#### **Step 4: Update the variable**\n\nVariables enable you to store and reuse values in Postman. We have created a [variable](https://learning.postman.com/docs/sending-requests/variables/) called `base_url` with the sample request [https://postman-api-learner.glitch.me](https://postman-api-learner.glitch.me). Replace it with your API endpoint to customize this collection.\n\n#### **Step 5: Add tests in the \"Tests\" tab**\n\nTests help you confirm that your API is working as expected. You can write test scripts in JavaScript and view the output in the \"Test Results\" tab.\n\n\u003cimg src=\"https://content.pstmn.io/b5f280a7-4b09-48ec-857f-0a7ed99d7ef8/U2NyZWVuc2hvdCAyMDIzLTAzLTI3IGF0IDkuNDcuMjggUE0ucG5n\"\u003e\n\n## 💪 Pro tips\n\n- Use folders to group related requests and organize the collection.\n- Add more [scripts](https://learning.postman.com/docs/writing-scripts/intro-to-scripts/) in \"Tests\" to verify if the API works as expected and execute workflows.\n\n## 💡Related templates\n\n[API testing basics](https://go.postman.co/redirect/workspace?type=personal\u0026collectionTemplateId=e9a37a28-055b-49cd-8c7e-97494a21eb54\u0026sourceTemplateId=ddb19591-3097-41cf-82af-c84273e56719)  \n[API documentation](https://go.postman.co/redirect/workspace?type=personal\u0026collectionTemplateId=e9c28f47-1253-44af-a2f3-20dce4da1f18\u0026sourceTemplateId=ddb19591-3097-41cf-82af-c84273e56719)  \n[Authorization methods](https://go.postman.co/redirect/workspace?type=personal\u0026collectionTemplateId=31a9a6ed-4cdf-4ced-984c-d12c9aec1c27\u0026sourceTemplateId=ddb19591-3097-41cf-82af-c84273e56719)\n\n# 📁 Collection: Auth\n\n## End-point: sign up\n\n### Method: POST\n\n\u003e ```\n\u003e {{baseUrl}}/auth/signup\n\u003e ```\n\n### Response: 201\n\n```json\n{\n  \"statusCode\": 201,\n  \"message\": \"user created\",\n  \"data\": {\n    \"id\": 219,\n    \"name\": \"Jon doe\",\n    \"email\": \"kodeyow624@amankro.com\",\n    \"createdAt\": \"2024-05-05T11:12:55.668Z\",\n    \"updatedAt\": \"2024-05-05T11:12:55.668Z\"\n  }\n}\n```\n\n⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃\n\n## End-point: sign in\n\n### Method: POST\n\n\u003e ```\n\u003e {{baseUrl}}/auth/signin\n\u003e ```\n\n### Body (**raw**)\n\n```json\n{\n  \"email\": \"kodeyow624@amankro.com\",\n  \"password\": \"notarealpassword10\"\n}\n```\n\n### Response: 201\n\n```json\n{\n  \"statusCode\": 201,\n  \"message\": \"logged in\",\n  \"data\": {\n    \"id\": 219,\n    \"name\": \"Jon doe\",\n    \"email\": \"kodeyow624@amankro.com\",\n    \"password\": \"$2b$10$XJbIfv9dRdQCAnYzyVKeh.gjcJ1QOUlI0KFM/C824WBkiC95iA9VG\",\n    \"createdAt\": \"2024-05-05T11:12:55.668Z\",\n    \"updatedAt\": \"2024-05-05T11:12:55.668Z\",\n    \"token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImtvZGV5b3c2MjRAYW1hbmtyby5jb20iLCJpYXQiOjE3MTQ5MDc4OTksImV4cCI6MTcxNTMzOTg5OX0.dLET8CbnW37D7MG_yAXhtz6w_SAkhucRtCsLTPTIuOw\"\n  }\n}\n```\n\n⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃\n\n## End-point: change password\n\n### Method: POST\n\n\u003e ```\n\u003e {{baseUrl}}/auth/password/reset\n\u003e ```\n\n⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃\n\n# 📁 Collection: User\n\n## End-point: Get authenticated user\n\nGets information about the authenticated user.\n\n### Method: GET\n\n\u003e ```\n\u003e {{baseUrl}}/user\n\u003e ```\n\n### Response: 200\n\n```json\n{\n  \"statusCode\": 200,\n  \"message\": \"user fetched\",\n  \"data\": {\n    \"email\": \"kodeyow624@amankro.com\",\n    \"name\": \"Jon doe\",\n    \"createdAt\": \"2024-05-05T00:44:46.156Z\",\n    \"updatedAt\": \"2024-05-05T00:44:46.156Z\",\n    \"id\": 217,\n    \"totalNotes\": 0\n  }\n}\n```\n\n### Response: 429\n\n```json\n{\n  \"error\": \"rateLimited\",\n  \"message\": \"Rate limit exceeded. Please retry after 1669048687\"\n}\n```\n\n### Response: 200\n\n```json\n{\n  \"statusCode\": 200,\n  \"message\": \"user fetched\",\n  \"data\": {\n    \"email\": \"kodeyow624@amankro.com\",\n    \"name\": \"Jon doe\",\n    \"createdAt\": \"2024-05-05T00:44:46.156Z\",\n    \"updatedAt\": \"2024-05-05T00:44:46.156Z\",\n    \"id\": 217,\n    \"totalNotes\": 0\n  }\n}\n```\n\n⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃\n\n## End-point: new note\n\n### Method: POST\n\n\u003e ```\n\u003e {{baseUrl}}/notes\n\u003e ```\n\n### Headers\n\n| Content-Type | Value     |\n| ------------ | --------- |\n| x-auth-token | {{token}} |\n\n### Body (**raw**)\n\n```json\n{\n  \"title\": \"Random\",\n  \"content\": \"Random stuff\",\n  \"priority\": \"MEDIUM\",\n  \"category\": [\"work\", \"play\"]\n}\n```\n\n### Response: 201\n\n```json\n{\n  \"statusCode\": 201,\n  \"message\": \"note created\",\n  \"data\": {\n    \"id\": 72,\n    \"title\": \"random\",\n    \"content\": \"Random stuff\",\n    \"status\": \"INCOMPLETE\",\n    \"userId\": 219,\n    \"priority\": \"MEDIUM\",\n    \"createdAt\": \"2024-05-05T11:26:57.729Z\",\n    \"updatedAt\": \"2024-05-05T11:26:57.729Z\"\n  }\n}\n```\n\n⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃\n\n## End-point: get notes\n\n### Method: GET\n\n\u003e ```\n\u003e {{baseUrl}}/notes\n\u003e ```\n\n### Headers\n\n| Content-Type | Value     |\n| ------------ | --------- |\n| x-auth-token | {{token}} |\n\n### Response: 200\n\n```json\n{\n  \"statusCode\": 200,\n  \"message\": \"notes fetched\",\n  \"data\": [\n    {\n      \"id\": 72,\n      \"title\": \"random\",\n      \"content\": \"Random stuff\",\n      \"status\": \"INCOMPLETE\",\n      \"userId\": 219,\n      \"priority\": \"MEDIUM\",\n      \"createdAt\": \"2024-05-05T11:26:57.729Z\",\n      \"updatedAt\": \"2024-05-05T11:26:57.729Z\",\n      \"categories\": [\n        {\n          \"name\": \"play\",\n          \"id\": 124\n        },\n        {\n          \"name\": \"work\",\n          \"id\": 125\n        }\n      ]\n    }\n  ]\n}\n```\n\n⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃\n\n## End-point: update note\n\n### Method: PATCH\n\n\u003e ```\n\u003e {{baseUrl}}/notes/:id\n\u003e ```\n\n### Body (**raw**)\n\n```json\n{\n  \"status\": \"COMPLETE\"\n}\n```\n\n### Response: 200\n\n```json\n{\n  \"statusCode\": 200,\n  \"message\": \"note updated\",\n  \"data\": {\n    \"id\": 72,\n    \"title\": \"random\",\n    \"content\": \"Random stuff\",\n    \"status\": \"COMPLETE\",\n    \"userId\": 219,\n    \"priority\": \"MEDIUM\",\n    \"createdAt\": \"2024-05-05T11:26:57.729Z\",\n    \"updatedAt\": \"2024-05-05T11:35:46.971Z\"\n  }\n}\n```\n\n⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃\n\n## End-point: update user\n\n### Method: PATCH\n\n\u003e ```\n\u003e {{baseUrl}}/user\n\u003e ```\n\n### Body (**raw**)\n\n```json\n{\n  \"name\": \"John doe\"\n}\n```\n\n### Response: 200\n\n```json\n{\n  \"statusCode\": 200,\n  \"message\": \"user updated\",\n  \"data\": {\n    \"id\": 219,\n    \"name\": \"John doe\",\n    \"email\": \"kodeyow624@amankro.com\",\n    \"password\": \"$2b$10$XJbIfv9dRdQCAnYzyVKeh.gjcJ1QOUlI0KFM/C824WBkiC95iA9VG\",\n    \"createdAt\": \"2024-05-05T11:12:55.668Z\",\n    \"updatedAt\": \"2024-05-05T11:36:24.367Z\"\n  }\n}\n```\n\n⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃\n\n## End-point: delete note\n\n### Method: DELETE\n\n\u003e ```\n\u003e {{baseUrl}}/notes/:id\n\u003e ```\n\n### Response: 200\n\n```json\n{\n  \"statusCode\": 200,\n  \"message\": \"note deleted\",\n  \"data\": {\n    \"id\": 72,\n    \"title\": \"random\",\n    \"content\": \"Random stuff\",\n    \"status\": \"COMPLETE\",\n    \"userId\": 219,\n    \"priority\": \"MEDIUM\",\n    \"createdAt\": \"2024-05-05T11:26:57.729Z\",\n    \"updatedAt\": \"2024-05-05T11:35:46.971Z\"\n  }\n}\n```\n\n⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃\n\n## End-point: delete authenticated user\n\n### Method: DELETE\n\n\u003e ```\n\u003e {{baseUrl}}/user\n\u003e ```\n\n### Response: 200\n\n```json\n{\n  \"statusCode\": 200,\n  \"message\": \"user deleted\",\n  \"data\": true\n}\n```\n\n⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃ ⁃\n\n## End-point: get note\n\n### Method: GET\n\n\u003e ```\n\u003e {{baseUrl}}/notes/:id\n\u003e ```\n\n### Headers\n\n| Content-Type | Value     |\n| ------------ | --------- |\n| x-auth-token | {{token}} |\n\n### Response: 200\n\n```json\n{\n  \"statusCode\": 200,\n  \"message\": \"note fetched\",\n  \"data\": {\n    \"id\": 72,\n    \"title\": \"random\",\n    \"content\": \"Random stuff\",\n    \"status\": \"INCOMPLETE\",\n    \"userId\": 219,\n    \"priority\": \"MEDIUM\",\n    \"createdAt\": \"2024-05-05T11:26:57.729Z\",\n    \"updatedAt\": \"2024-05-05T11:26:57.729Z\"\n  }\n} \n```\n\n# Docker \n\nThis guide explains how to pull and run the **Memoer** application using Docker. Memoer is a Node.js application that can be easily deployed using Docker.\n\n## Prerequisites\n\nBefore you start, ensure you have the following installed:\n\n- [Docker](https://www.docker.com/products/docker-desktop) (Make sure Docker is running)\n\n## Steps to Pull Memoer\n\nFirst, pull the latest Docker image for Memoer from Docker Hub using the following command:\n\u003e ```\n\u003e docker docker pull jefedcreator/memoer\n\u003e ```\n\nTo run the server:\n\n\u003e ```\n\u003e docker run -d -p 3000:3000 jefedcreator/memoer\n\u003e ```\n\n\nAfter running the container, the Memoer application will be accessible at: http://localhost:3000\n\n# Testing\nTo test the authentication service, use the following command:\n\u003e ```\n\u003e yarn test:auth\n\u003e ```\n\nTo test the user service, use the following command:\n\u003e ```\n\u003e yarn test:user\n\u003e ```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjefedcreator%2Fmemoer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjefedcreator%2Fmemoer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjefedcreator%2Fmemoer/lists"}