{"id":41054424,"url":"https://github.com/dieperid/bucket-adapter","last_synced_at":"2026-01-22T11:34:27.595Z","repository":{"id":327761619,"uuid":"1101373601","full_name":"dieperid/bucket-adapter","owner":"dieperid","description":"Bucket Adapter repository for BI1.","archived":false,"fork":false,"pushed_at":"2026-01-02T19:20:12.000Z","size":132,"stargazers_count":0,"open_issues_count":26,"forks_count":0,"subscribers_count":0,"default_branch":"develop","last_synced_at":"2026-01-02T20:18:49.404Z","etag":null,"topics":["docker","java","openapi","swagger-ui"],"latest_commit_sha":null,"homepage":"https://dieperid.github.io/bucket-adapter/","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/dieperid.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-21T15:27:35.000Z","updated_at":"2026-01-02T19:20:13.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dieperid/bucket-adapter","commit_stats":null,"previous_names":["dieperid/bucket-adapter"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/dieperid/bucket-adapter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dieperid%2Fbucket-adapter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dieperid%2Fbucket-adapter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dieperid%2Fbucket-adapter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dieperid%2Fbucket-adapter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dieperid","download_url":"https://codeload.github.com/dieperid/bucket-adapter/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dieperid%2Fbucket-adapter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28662139,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"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":["docker","java","openapi","swagger-ui"],"created_at":"2026-01-22T11:34:26.837Z","updated_at":"2026-01-22T11:34:27.586Z","avatar_url":"https://github.com/dieperid.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bucket Adapter\n\n## Description\n\nBucket Adapter API is a Spring Boot application designed to provide **a unified interface for cloud storage buckets** (AWS S3, and in the future GCP, Azure, and other providers).\n\nThe application exposes a REST API that allows clients to:\n- upload files\n- download files\n- update existing files\n- delete files (single or recursive)\n- list bucket contents\n- check if an object exists\n- generate temporary shareable URLs\n\nThe architecture is based on the **Adapter + Factory pattern**, enabling easy integration of new cloud providers without impacting the business logic.\n\n## Getting Started\n\n### Documentation\n\n1. Generate documentation with Doxygen\n\n```bash\ndoxygen Doxyfile\n```\n\nThe documentaion will be located in the `html` folder in `/docs`\n\n2. View the documentation\n\n```bash\n# Start a PHP server\nphp -S localhost:8000 -t docs/html\n```\n\nGo on [http://localhost:8000](http://localhost:8000) and look at the amazing doc generated by Doxygen\n\n### Kanban video\n\nYou can find the video explaining my Kanban here : https://youtu.be/Hqd9vmJnb0Q\n\n### Prerequisites\n\nThe following tools and dependencies are required:\n\n* **Language / Runtime**\n  * Java JDK 21 `openjdk 21.0.9 2025-10-21`\n  * OpenJDK Runtime Environment `(Red_Hat-21.0.9.0.10-1) (build 21.0.9+10)`\n  * JVM compatible with Java 21\n\n* **Frameworks \u0026 Libraries**\n  * Spring Boot 4.0.0\n  * Spring Framework 7.0.1\n  * AWS SDK v2 (S3, Presigner)\n  * JUnit 5\n  * Mockito\n\n* **Build \u0026 Dependency Management**\n  * Maven Wrapper (`./mvnw` or `mvn`)\n\n* **IDE used**\n  * Visual Studio Code with [Java extension](https://marketplace.visualstudio.com/items?itemName=redhat.java)\n\n* **Supported OS (tested)**\n  * Linux (`Fedora Linux 42 (Workstation Edition)`)\n\n* **Cloud Providers**\n  * AWS S3 (currently implemented)\n  * Google Cloud Storage (planned)\n  * Azure Blob Storage (planned)\n\n* **Virtualization**\n  * Docker version 29.1.3, build f52814d\n\n---\n\n### Configuration\n\n#### Environment variables / system properties\n\nThe application relies on external configuration to select the storage provider and access the bucket.\n\n1. Copy the `.env.example` file to a `.env` file using this command : `cp .env.example .env`.\n2. Configure **Spring Configuration** variables in `.env` file :\n\n```bash\n# Spring Configuration\nSPRING_APPLICATION_NAME=yourappname\nSERVER_PORT=8080\n```\n\n#### AWS configuration\n\nRequired variables:\n\n```bash\nAWS_REGION=your-region\nAWS_ACCESS_KEY_ID=your-access-key-id\nAWS_SECRET_ACCESS_KEY=your-secret-access-key\n```\n\nProvider selection:\n\n```bash\nPROVIDER_IMPL=AWS\n```\n\n#### GCP configuration\n\nRequired variables :\n\n```bash\nGCP_PROJECT_ID=your-project-id\nGOOGLE_APPLICATION_CREDENTIALS=./path-to-credentials.json\n```\n\n\u003e Note : You'll have to put the path of your `credentials.json` file in the `GOOGLE_APPLICATION_CREDENTIALS` environment variable.\n\nProvider selection:\n\n```bash\nPROVIDER_IMPL=GCP\n```\n\n#### Azure configuration\n\n...\n\n## Deployment\n\n### On dev environment\n\n#### Build the project\n\n```bash\nmvn clean install\n```\n\n#### Run tests\n\n**Generate \"data\" folder for testing**\n\n1. Make the script executable :\n\n```bash\nchmod +x setup-test-data.sh\n```\n\n2. Execute the script to create the **data** folder with sample files for testing :\n\n```bash\n./setup-test-data.sh\n```\n\n3. Run tests\n\n```bash\nnvn test\n```\n\n4. Check for coverage\n\n```bash\n# Generate coverage report\nmvn jacoco:report\n\n# Show coverage report\nphp -S localhost:8000 -t target/site/jacoco\n```\n\n#### Run the application\n```bash\nmvn spring-boot:run\n```\n\n### On integration environment\n\n#### Maven build\n\n```bash\n# Make sure Maven wrapper is executable\nchmod +x mvnw\n\n# Clean and compile, skip tests\nmvn clean package -DskipTests\n\n# (Optional) Run tests\nmvn test\n```\n\n#### Docker build \u0026 run\n\n```bash\n# Build Docker image\ndocker compose up --build\n```\n\n### How to use the application ?\n\n#### API\n\n1. To use the API you can read this [documentation](docs/api-documentation.md).\n2. You can also find the [online documentation](https://dieperid.github.io/bucket-adapter/) using Redoc to publish the API documentation.\n\n**How to update the API documentation ?**\n\nTo update the documentation, first you'll have to start run the project using **maven** or **docker** :\n\n```bash\n# Maven\nmvn spring-boot:run\n\n# Docker\ndocker compose up --build\n```\n\nWhen your app is running, you'll be able generate the API documentaion in `json` format or `yaml` format.\n\n\u003e Note : Redoc use the `yaml` format to display the API documentation in web interface\n\nTo generate run one if these command :\n\n```bash\n# JSON format\ncurl http://localhost:8080/v3/api-docs \u003e docs/openapi.json\n\n# YAML format\ncurl http://localhost:8080/v3/api-docs \u003e docs/openapi.yaml\n```\n\n## Directory structure\n\n```bash\n.\n├── docker-compose.yml\n├── Dockerfile\n├── .env.example\n├── .gcp-credentials.example.json\n├── checkstyle.xml\n├── Doxyfile\n├── mvnw\n├── mvnw.cmd\n├── pom.xml\n├── README.md\n├── setup-test-data.sh\n├── docs                                                    # Documentation folder\n└── src                                                     # Source code\n    ├── main\n    │   ├── java\n    │   │   └── com\n    │   │       └── example\n    │   │           └── bucketadapter\n    │   │               ├── adapter\n    │   │               │   ├── BucketAdapter.java\n    │   │               │   └── impl                        # Adapter implementation\n    │   │               ├── BucketAdapterApplication.java\n    │   │               ├── config\n    │   │               ├── controller\n    │   │               ├── exception                       # Bucket exception\n    │   │               ├── factory\n    │   │               ├── helper                          # Helpers\n    │   │               └── service\n    │   └── resources\n    │       ├── application.properties\n    │       ├── static\n    │       └── templates\n    └── test                                                # Tests folder\n        └── java\n            └── com\n                └── example\n                    └── bucketadapter\n                        ├── adapter\n                        │   └── impl\n                        └── BucketAdapterApplicationTests.java\n```\n\n## Collaborate\n\n### Proposing a new feature\n\n- Create an **issue** describing the feature or bug\n- Submit a **Pull Request** linked to the issue\n\n### Commit convention\n\nThis project follows [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/)\n\nExamples :\n\n```bash\nfeat: add GCP bucket adapter\nfix: handle S3 presigner exception\ntest: add unit tests for recursive delete\n```\n\n### Git branch workflow\n\nThis projects use the [Gitflow workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow)\n\nExamples :\n\n```bash\nfeature/implement-aws-s3\nrelease/1.0.0\nhotfix/fix-servor-error-on-s3-upload\n```\n\n## License\n\n[MIT License](LICENSE)\n\n## Contact\n\nFor questions or contributions:\n\n- GitHub Issues\n- Pull Request discussions\n\nFor personal interactions:\n\n- Dieperink David\n- contact@daviddieperink.ch\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdieperid%2Fbucket-adapter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdieperid%2Fbucket-adapter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdieperid%2Fbucket-adapter/lists"}