{"id":31723078,"url":"https://github.com/lizar22/fem-cloud-api","last_synced_at":"2026-04-02T02:51:03.228Z","repository":{"id":298329611,"uuid":"998846239","full_name":"Lizar22/fem-cloud-api","owner":"Lizar22","description":"RESTful API built with Java via Spring Boot that lets you manage and explore quotes by feminist and pioneering women throughout history","archived":false,"fork":false,"pushed_at":"2025-07-28T13:42:57.000Z","size":58,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-28T15:34:08.803Z","etag":null,"topics":["api-rest","database","feminist-data","feministech","java","jpa-hibernate","maven","mysql","quotes-api","restful-api","spring-boot","women-in-tech"],"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/Lizar22.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":"2025-06-09T10:47:46.000Z","updated_at":"2025-07-28T13:43:01.000Z","dependencies_parsed_at":"2025-07-28T15:18:52.681Z","dependency_job_id":"99b9d173-cae3-49cb-9a9a-fddd5dcd268e","html_url":"https://github.com/Lizar22/fem-cloud-api","commit_stats":null,"previous_names":["lizar22/fem-cloud-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Lizar22/fem-cloud-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lizar22%2Ffem-cloud-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lizar22%2Ffem-cloud-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lizar22%2Ffem-cloud-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lizar22%2Ffem-cloud-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Lizar22","download_url":"https://codeload.github.com/Lizar22/fem-cloud-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lizar22%2Ffem-cloud-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279000736,"owners_count":26082921,"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-10-09T02:00:07.460Z","response_time":59,"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":["api-rest","database","feminist-data","feministech","java","jpa-hibernate","maven","mysql","quotes-api","restful-api","spring-boot","women-in-tech"],"created_at":"2025-10-09T04:25:14.197Z","updated_at":"2025-10-09T04:25:15.732Z","avatar_url":"https://github.com/Lizar22.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🟪 FemCloud API\n\n**FemCloud API** is a RESTful API built with **Spring Boot** that lets you manage and explore quotes by **feminist and pioneering women** throughout history. It's designed as a learning project and a tribute to the words and ideas that inspired generations of women and men.\n\n\u003cbr\u003e\n\n## 📚 Table of Contents\n\n- [🚀 Project Purpose](#-project-purpose)\n- [✨ Thematic Focus](#-thematic-focus)\n- [🛠️ Technologies \u0026 Tools](#️-technologies--tools)\n- [🗂️ Project Structure](#️-project-structure)\n- [📋 Functional Requirements](#-functional-requirements)\n- [🔌 API Endpoints](#-api-endpoints)\n- [📦 Example JSON for Creating/Updating a Quote](#-example-json-for-creatingupdating-a-quote)\n- [⚠️ Error Handling](#️-error-handling)\n- [🧪 Testing with Postman](#-testing-with-postman)\n- [✅ Non-Functional Requirements](#-non-functional-requirements)\n- [💡 Possible Future Improvements](#-possible-future-improvements)\n- [🧠 What I Learned](#-what-i-learned)\n- [📁 Suggested Directory Structure](#-suggested-directory-structure)\n- [🧾 License](#-license)\n\n\u003cbr\u003e\n\n## 🚀 Project Purpose\n\nThis project helps you:\n\n- Learn how to build a complete CRUD REST API using Spring Boot  \n- Understand the MVC architecture (Controller – Service – Repository)  \n- Connect a Spring Boot app to a **MySQL** database  \n- Practice API testing with **Postman**  \n- Promote historical and inspirational quotes from impactful women\n\n\u003cbr\u003e\n\n\n## ✨ Thematic Focus\n\nThis API is dedicated to preserving and sharing **quotes by feminist thinkers, activists, and historical pioneers**.\n\nExamples of influential women:\n\n- **Simone de Beauvoir**  \n- **Wu Zetian**  \n- **Rosa Luxemburg**  \n- **Audre Lorde**  \n- **Christine de Pizan**  \n- **Clara Campoamor**  \n- **Aspasia of Miletus**  \n- **Frida Kahlo**  \n- **Angela Davis**  \n- **Nana Asma’u**  \n- **Olympe de Gouges**  \n- **Virginia Woolf**  \n- **Im Yunjidang**  \n- **Malala Yousafzai**  \n- **Qiu Jin**  \n- **Dolores Ibárruri**  \n- **Hypatia of Alexandria**\n\nQuotes should reflect feminist thought, social change, human rights, or historical relevance.\n\n\u003cbr\u003e\n\n\n## 🛠️ Technologies \u0026 Tools\n\n- ✅ Java 21  \n- ✅ Spring Boot  \n- ✅ MySQL\n- ✅ Jakarta Bean Validation\n- ✅ Maven\n- ✅ IntelliJ IDEA\n- ✅ Postman  \n- ✅ Git \u0026 GitHub  \n- ✅ Trello (for task tracking)\n\n\u003cbr\u003e\n\n\n## 🗂️ Project Structure\n\nThe project follows a clean **3-layer MVC architecture**:\n\n```\nsrc/\n├── main/\n│   └── java/com/femcloudapi\n│        ├── controllers\n│        ├── dtos    \n│        ├── exceptions          \n│        ├── models      \n│        ├── repositories           \n│        └── services   \n├── resources/\n│   └── application.properties\n│   └── data.sql\n├── test/\n│   └── application-mysql.properties    \n\n````\n\n\u003cbr\u003e\n\n\n## 📋 Functional Requirements\n\n- [x] View all quotes  \n- [x] View a quote by ID  \n- [x] Create a new quote  \n- [x] Update an existing quote  \n- [x] Delete a quote\n\n\u003cbr\u003e\n\n## 🔌 API Endpoints\n\n| Method | Endpoint       | Description                |\n| ------ | -------------- | -------------------------- |\n| GET    | `/quotes`      | Get all quotes             |\n| GET    | `/quotes/{id}` | Get a specific quote by ID |\n| POST   | `/quotes`      | Add a new quote            |\n| PUT    | `/quotes/{id}` | Update an existing quote   |\n| DELETE | `/quotes/{id}` | Delete a quote             |\n\n\u003cbr\u003e\n\n\n## 📦 Example JSON for Creating/Updating a Quote\n\n```json\n{\n  \"text\": \"I am not free while any woman is unfree, even when her shackles are very different from my own.\",\n  \"author\": \"Audre Lorde\",\n  \"year\": 1981\n}\n```\n\n\u003cbr\u003e\n\n\n## ⚠️ Error Handling\n\nWhen a quote is not found by ID, the API responds with a structured JSON error and a `404` status code:\n\n```json\n{\n    \"message\": \"Quote not foud with id 99\",\n    \"status\": 404,\n    \"errorCode\": \"PRODUCT_NOT_FOUND\",\n    \"path\": \"/quotes/99\",\n    \"timestamp\": \"2025-07-20 23:49:18\"\n}\n```\n\nThis is handled via a custom exception `QuoteNotFoundException`, a `GlobalExceptionHandler` and an `ErrorResponse` class.\n\n\u003cbr\u003e\n\n\n## 🧪 Testing with Postman\n\n1. Run the application with your IDE (e.g., IntelliJ, VS Code)\n2. Use Postman to test all API endpoints\n3. Ensure your MySQL database is running and configured\n4. Update `application.properties` or `application.yml` with correct DB settings\n\n\u003cbr\u003e\n\n\n## ✅ Non-Functional Requirements\n\n* Clean MVC architecture\n* Connection to MySQL database\n* Clean and maintainable code\n* Error handling with custom messages\n* Manual API testing via Postman\n* Input validation using `@Valid`\n\n\u003cbr\u003e\n\n\n## 💡 Possible Future Improvements\n\n* Pagination and search by author\n* Swagger/OpenAPI documentation\n* Spring Security authentication\n\n\u003cbr\u003e\n\n\n## 🧠 What I Learned\n\n* Building REST APIs with Spring Boot\n* Use of `JpaRepository` for CRUD operations\n* Structuring code using MVC pattern\n* Error handling using custom exceptions\n* Testing endpoints with Postman\n* Integration tests via H2 and Mysql profiles\n\n\u003cbr\u003e\n\n\n## 📁 Suggested Directory Structure\n\n```\nsrc/\n├── main/\n│   └── java/com/femcloudapi\n│        ├── controllers\n│        ├── dtos    \n│        ├── exceptions          \n│        ├── models      \n│        ├── repositories           \n│        └── services   \n├── resources/\n│   └── application.properties\n│   └── data.sql\n└── test/\n│   └── application-mysql.properties\n```\n\n\u003cbr\u003e\n\n## 🧾 License\n\nThis project is part of the FemCoders educational program.\n\n\u003cbr\u003e\n\n## 🙌 Created with 💜 by Lizar22\n\nFemCloud API is more than just a CRUD project — it's a tribute to feminist voices and an essential part of my Spring Boot learning journey, combining backend development practice with the creation of powerful, respectful software.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flizar22%2Ffem-cloud-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flizar22%2Ffem-cloud-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flizar22%2Ffem-cloud-api/lists"}