{"id":15091202,"url":"https://github.com/bilalmuzafferkose/spring-customer-archiving-system","last_synced_at":"2026-01-04T09:31:55.469Z","repository":{"id":240626901,"uuid":"803016418","full_name":"bilalmuzafferkose/spring-customer-archiving-system","owner":"bilalmuzafferkose","description":"JWT Based Customer Archiving System - Backend","archived":false,"fork":false,"pushed_at":"2024-05-19T22:56:08.000Z","size":358,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-27T10:29:41.687Z","etag":null,"topics":["docker","docker-compose","jwt","mysql","open-api","rabbitmq","spring-boot","spring-security","swagger"],"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/bilalmuzafferkose.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-05-19T21:50:13.000Z","updated_at":"2024-05-29T09:59:17.000Z","dependencies_parsed_at":"2024-05-20T07:51:46.150Z","dependency_job_id":"67e759bc-85c0-44d4-abcb-30019628a23d","html_url":"https://github.com/bilalmuzafferkose/spring-customer-archiving-system","commit_stats":null,"previous_names":["bilalmuzafferkose/spring-customer-archiving-system"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bilalmuzafferkose%2Fspring-customer-archiving-system","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bilalmuzafferkose%2Fspring-customer-archiving-system/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bilalmuzafferkose%2Fspring-customer-archiving-system/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bilalmuzafferkose%2Fspring-customer-archiving-system/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bilalmuzafferkose","download_url":"https://codeload.github.com/bilalmuzafferkose/spring-customer-archiving-system/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244945594,"owners_count":20536295,"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":["docker","docker-compose","jwt","mysql","open-api","rabbitmq","spring-boot","spring-security","swagger"],"created_at":"2024-09-25T10:36:26.233Z","updated_at":"2026-01-04T09:31:55.424Z","avatar_url":"https://github.com/bilalmuzafferkose.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spring Boot - Spring Security - JWT Tabanlı Müşteri Arşivleme Sistemi\n\nSpring Boot, Spring Security, RabbitMQ gibi teknolojiler kullanılarak geliştirilmiş bu uygulamada, kullanıcı yetkilendirme ve kimlik doğrulama sisteminin yanı sıra API Authentication uygulaması da içermektedir. Temel olarak amacı tam yetkili bir kullanıcının, belirli rollerle korunan API endpointlerine erişerek müşteri ve dosya yönetimini sağlamaktır. Ayrıca her müşteri kaydında müşteriye RabbitMQ üzerinden email mesajı gönderilmektedir.\n\n#### Frontend (React) uygulaması için: [JWT Based Customer Archiving System - Frontend](https://github.com/bilalmuzafferkose/customer-archiving-system-ui)\n\n## Başlangıç\n\nProjeyi başlatmak ve yerel makinenizde çalıştırmak için aşağıdaki adımları takip edin.\n\n### Gereksinimler\n\nAşağıdaki yazılımların yüklü olduğundan emin olun:\n- Docker\n- Docker Compose\n- Java (min. JDK 18)\n\n### Kullanılan Teknolojiler\n- Spring Boot\n- Spring Data JPA\n- Spring Security\n- JWT (JSON Web Token)\n- Docker ve Docker Compose\n- MySQL\n- RabbitMQ\n\n### Kurulum\n\n1. Repository'yi klonlayın:\n   ```bash\n   git clone https://github.com/bilalmuzafferkose/spring-customer-archiving-system\n   ```\n2. Proje dizinine gidin:\n    ```bash\n    cd spring-customer-archiving-system\n    ```\n3. Spring Boot uygulamasını başlatın:\n    ```bash\n    ./mvnw spring-boot:run\n    ```\n4. Docker Compose ile MySQL ve RabbitMQ servislerini başlatın\n    ```bash\n    docker-compose up -d\n    ```\n## Kullanım\n\nAşağıda proje tarafından sunulan API'lerin kullanımı hakkında bilgiler bulunmaktadır.\nAyrıca ana dizindeki .json uzantılı Postman Collection ile Postman üzerinden de API istekleri yapılabilir.\n\n![Swagger UI](images/swagger.png)\n\n### Register\n\n**Endpoint:** `/register` (POST)\n\n**Açıklama:** User kaydı oluşturur ve kayıt sonrası bir token üretir\n\n**Parametreler:**\n- `firstName` (zorunlu)\n- `lastName` (zorunlu)\n- `username` (zorunlu)\n- `password` (zorunlu)\n- `role` (zorunlu)\n\n### Login\n\n**Endpoint:** `/login` (POST)\n\n**Açıklama:** Kullanıcı girişi yapar.\n\n**Parametreler:**\n- `username` (zorunlu)\n- `password` (zorunlu)\n\n### Save Customer\n\n**Endpoint:** `/v1/customer/save` (POST)\n\n**Açıklama:** Müşteri ekler. Sonrasında RabbitMQ ile welcome emaili gönderir.\n\n### Get All Customer\n\n**Endpoint:** `/v1/customer/getAll` (GET)\n\n**Açıklama:** Tüm müşterileri getirir.\n\n### Get Customer\n\n**Endpoint:** `/v1/customer/{id}` (GET)\n\n**Açıklama:** Müşteriyi getirir.\n\n### Delete Customer\n\n**Endpoint:** `/v1/customer/delete/{citizenshipNumber}` (DELETE)\n\n**Açıklama:** Müşteriyi siler.\n\n### Update Customer\n\n**Endpoint:** `/v1/customer/update/{citizenshipNumber}` (UPDATE)\n\n**Açıklama:** Müşteriyi günceller.\n\n### Save File\n\n**Endpoint:** `/v1/file/upload` (POST)\n\n**Açıklama:** Sunucuya statik olarak ilgili dosyayı yükler. Bilgilerini ise veritabanında saklar.\n\n### Delete File\n\n**Endpoint:** `/v1/file/delete/{fileId}` (DELETE)\n\n**Açıklama:** Sunucudan dosyayı siler. Veritabanından ilgili dosya kaydını siler.\n\n### Get All Files\n\n**Endpoint:** `/v1/file/getAll` (GET)\n\n**Açıklama:** Bütün dosyaları getirir.\n\n### Get File (Download)\n\n**Endpoint:** `/v1/file/{filename}` (GET)\n\n**Açıklama:** Dosyayı getirir.\n\n### Update File\n\n**Endpoint:** `/v1/file/update/{fileId}/{customerId}` (PUT)\n\n**Açıklama:** Dosyayı günceller.\n\n### Swagger UI\n\n**Endpoint:** `/swagger-ui/index.html` (GET)\n\n**Açıklama:** Swagger UI gösterir.\n\n## ER Diagram\n\nUser isimli Entity ile Customer arasında bir bağlantı olmadan proje sağlanmıştır. Customer ile File arasında OneToMany ilişki vardır.\n\n![ER Diagram](images/er_diagram.png)\n\n## RabbitMQ ile Mail Göndermek\n\n1. Eğer RabbitMQ ile email göndermek isterseniz application.properties dosyasındaki aşağıdaki alanların düzenlenmesi gerekiyor. Mailin gönderilmesi icin Google güvenlik ayarlarından App Password alınmasi gerekiyor.\n    ```bash\n    spring.mail.username=\n    spring.mail.password=\n    ```\n   \nTest amaçlı gönderilen mail aşağıda örnek olarak gösterilmiştir.\n\n![Mail](images/mail.png)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbilalmuzafferkose%2Fspring-customer-archiving-system","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbilalmuzafferkose%2Fspring-customer-archiving-system","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbilalmuzafferkose%2Fspring-customer-archiving-system/lists"}