{"id":26689404,"url":"https://github.com/muellerconstantin/attoly-api","last_synced_at":"2026-04-11T01:04:57.403Z","repository":{"id":171321930,"uuid":"557218405","full_name":"MuellerConstantin/attoly-api","owner":"MuellerConstantin","description":"Data management and programming interface for the Attoly URL shortener platform.","archived":false,"fork":false,"pushed_at":"2024-11-18T19:19:55.000Z","size":633,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-05T18:46:39.302Z","etag":null,"topics":["attoly","docker","java","java-mail","jpa","jwt","kubernetes","mysql","oauth2","oauth2-login","redis","redis-client","rest","rest-api","restful","spring-boot","spring-data-jpa","spring-data-redis","spring-mvc","url-shortener"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MuellerConstantin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2022-10-25T09:38:46.000Z","updated_at":"2024-11-18T19:19:59.000Z","dependencies_parsed_at":"2025-03-26T14:41:01.491Z","dependency_job_id":"ce2dfe92-9906-433a-8aa8-e07219c09a9e","html_url":"https://github.com/MuellerConstantin/attoly-api","commit_stats":null,"previous_names":["0x1c1b/attoly-api","muellerconstantin/attoly-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MuellerConstantin/attoly-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MuellerConstantin%2Fattoly-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MuellerConstantin%2Fattoly-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MuellerConstantin%2Fattoly-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MuellerConstantin%2Fattoly-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MuellerConstantin","download_url":"https://codeload.github.com/MuellerConstantin/attoly-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MuellerConstantin%2Fattoly-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279002057,"owners_count":26083286,"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":["attoly","docker","java","java-mail","jpa","jwt","kubernetes","mysql","oauth2","oauth2-login","redis","redis-client","rest","rest-api","restful","spring-boot","spring-data-jpa","spring-data-redis","spring-mvc","url-shortener"],"created_at":"2025-03-26T14:35:18.150Z","updated_at":"2026-04-11T01:04:57.394Z","avatar_url":"https://github.com/MuellerConstantin.png","language":"Java","readme":"# Attoly API\n\n\u003e Data management and programming interface for the Attoly URL shortener platform.\n\n![Logo](docs/images/banner.svg)\n\n![](https://img.shields.io/badge/dynamic/xml?color=red\u0026label=Java\u0026query=%2F%2A%5Blocal-name%28%29%3D%27project%27%5D%2F%2A%5Blocal-name%28%29%3D%27properties%27%5D%2F%2A%5Blocal-name%28%29%3D%27java.version%27%5D\u0026url=https%3A%2F%2Fraw.githubusercontent.com%2FMuellerConstantin%2Fattoly-api%2Fmaster%2Fpom.xml\u0026logo=openjdk)\n![](https://img.shields.io/badge/dynamic/xml?color=green\u0026label=Spring%20Boot\u0026query=%2F%2A%5Blocal-name%28%29%3D%27project%27%5D%2F%2A%5Blocal-name%28%29%3D%27parent%27%5D%2F%2A%5Blocal-name%28%29%3D%27version%27%5D\u0026url=https%3A%2F%2Fraw.githubusercontent.com%2FMuellerConstantin%2Fattoly-api%2Fmaster%2Fpom.xml\u0026logo=spring-boot)\n![](https://img.shields.io/badge/ORM-Hibernate-blue?logo=hibernate)\n![](https://img.shields.io/badge/Database-PostgreSQL-blue?logo=postgresql)\n![](https://img.shields.io/badge/Database-Redis-red?logo=redis)\n![](https://img.shields.io/badge/OpenAPI-3.0.1-green?logo=openapi-initiative)\n\n## Table of contents\n\n- [Introduction](#introduction)\n- [Architecture](#architecture)\n- [Deployment](#deployment)\n- [License](#license)\n  - [Forbidden](#forbidden)\n\n## Introduction\n\nThis is the backend of the Attoly URL shortener platform, responsible for data storage and exchange.\nAttoly allows creating short links as aliases for long URLs, which are easier to embed in websites,\nchats and documents. Originally, the Attoly Platform is a learning project to gain experience in\ndistributed systems, user management, and cloud deployment. Therefore there are no claims to maintenance,\nfreedom from errors or further development. Further development only occurs as part of the learning process.\n\n## Architecture\n\nThe Attoly platform is a distributed system. The Attoly API Service therefore only provides the backend\nof the platform. It is a monolithic 3-layer architecture which is geared towards the horizontal scaling\nof the service. The application is divided into the layers of presentation, business logic and data\nmanagement. The presentation layer essentially consists of an HTTP RESTful interface for machine-to-machine\ninteraction with the outsourced frontend. This interface is documented in OpenAPI format and stored\n[here](src/main/resources/public/docs/web/v1/openapi.yml). Alternatively, the documentation can also be viewed\nas a webpage via the self-service. The middle layer is the business layer, which essentially contains the\nbusiness logic in the form of services. The third and last layer is the data access layer, which is\nresponsible for data storage and event sourcing. The databases are accessed via repositories or data access\nobjects (DAO).\n\n![Architecture](docs/images/architecture.svg)\n\nThe Attoly API also uses various third-party services, including but not limited to databases. Attoly uses a\nrelational database, by default a PostgreSQL database, for storing entities and a NoSQL Redis database for storing\ntemporary information like tokens. For individual processes, such as verifying user accounts, it is necessary\nto send e-mails. An SMTP server must be configured for this, which Attoly uses for this purpose.\n\n## Deployment\n\nDeployment can be done via Docker or standalone. Information on this can be found under\n[deployment](docs/deployment.md). The configuration options of the application are also important for deployment\nand development. You can find it under [configuration](docs/configuration.md).\n\n## License\n\nCopyright (c) 2025 Constantin Müller\n\n[GNU AFFERO GENERAL PUBLIC LICENSE](https://www.gnu.org/licenses/) or [LICENSE](LICENSE.md) for\nmore details.\n\n### Forbidden\n\n**Hold Liable**: Software is provided without warranty and the software\nauthor/license owner cannot be held liable for damages.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuellerconstantin%2Fattoly-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmuellerconstantin%2Fattoly-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuellerconstantin%2Fattoly-api/lists"}