{"id":20153159,"url":"https://github.com/hendrowunga/springboot-monolithic","last_synced_at":"2025-03-03T01:22:16.824Z","repository":{"id":246561840,"uuid":"821391807","full_name":"hendrowunga/SpringBoot-monolithic","owner":"hendrowunga","description":"Spring Boot Backend ","archived":false,"fork":false,"pushed_at":"2024-07-09T14:23:40.000Z","size":158,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-13T12:20:27.592Z","etag":null,"topics":["mysql","spring-boot","spring-data-jpa","spring-mvc","spring-security"],"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/hendrowunga.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-06-28T12:42:02.000Z","updated_at":"2024-11-03T14:14:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"3ef68180-8660-4db1-a9f5-e29a9c156287","html_url":"https://github.com/hendrowunga/SpringBoot-monolithic","commit_stats":null,"previous_names":["hendrowunga/e-commerce-backend-springboot","hendrowunga/springboot-monolithic"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hendrowunga%2FSpringBoot-monolithic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hendrowunga%2FSpringBoot-monolithic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hendrowunga%2FSpringBoot-monolithic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hendrowunga%2FSpringBoot-monolithic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hendrowunga","download_url":"https://codeload.github.com/hendrowunga/SpringBoot-monolithic/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241592969,"owners_count":19987463,"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":["mysql","spring-boot","spring-data-jpa","spring-mvc","spring-security"],"created_at":"2024-11-13T23:17:25.590Z","updated_at":"2025-03-03T01:22:16.806Z","avatar_url":"https://github.com/hendrowunga.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n# E-Commerce Backend Application\n\n\n\n## Deskripsi Proyek\n\nProyek ini adalah backend untuk aplikasi e-commerce yang dibangun menggunakan Spring Boot. Backend ini menyediakan berbagai fitur untuk mengelola produk, pesanan, dan pengguna dalam sebuah platform e-commerce.\n\n## Fitur Utama\n\n- Manajemen pengguna: Registrasi, login, dan verifikasi pengguna.\n- Manajemen produk: Menambahkan, menghapus, dan mengupdate produk.\n- Manajemen pesanan: Menampilkan dan mengelola pesanan pengguna.\n\n## Teknologi Utama\n\n- **Spring Boot**: Framework Java yang digunakan untuk membangun aplikasi backend.\n- **Spring Security**: Untuk keamanan dan otentikasi pengguna.\n- **Spring Data JPA**: Untuk interaksi dengan database menggunakan Hibernate.\n- **JWT (JSON Web Token)**: Untuk autentikasi pengguna.\n- **JUnit 5**: Untuk pengujian unit.\n- **MockMvc**: Untuk pengujian integrasi.\n\n## Struktur Proyek\n\n```\n├── src/\n│   ├── main/\n│   │   ├── java/\n│   │   │   └── com/\n│   │   │       └── Backend/\n│   │   │           └── SpringBoot/\n│   │   │               └── E_Commerce_backend/\n│   │   │                   ├── api/\n│   │   │                   │   ├── controller/\n│   │   │                   │   │   ├── AuthenticationController.java\n│   │   │                   │   │   ├── OrderController.java\n│   │   │                   │   │   ├── ProductController.java\n│   │   │                   │   │   └── UserController.java\n│   │   │                   │   ├── model/\n│   │   │                   │   │   ├── LocalUser.java\n│   │   │                   │   │   ├── WebOrder.java\n│   │   │                   │   │   └── Product.java\n│   │   │                   │   └── security/\n│   │   │                   │       ├── JUnitUserDetailsService.java\n│   │   │                   │       ├── JWTRequestFilter.java\n│   │   │                   │       └── JWTServices.java\n│   │   │                   ├── model/\n│   │   │                   │   ├── dao/\n│   │   │                   │   │   ├── LocalUserDAO.java\n│   │   │                   │   │   ├── OrderDAO.java\n│   │   │                   │   │   └── ProductDAO.java\n│   │   │                   │   ├── VerificationToken.java\n│   │   │                   │   └── EncryptionServices.java\n│   │   │                   └── services/\n│   │   │                       ├── UserService.java\n│   │   │                       ├── ProductService.java\n│   │   │                       ├── OrderService.java\n│   │   │                       └── JWTServices.java\n│   │   └── resources/\n│   │       └── application.properties\n│   └── test/\n│       └── java/\n│           └── com/\n│               └── Backend/\n│                   └── SpringBoot/\n│                       └── E_Commerce_backend/\n│                           ├── api/\n│                           │   └── controller/\n│                           │       ├── AuthenticationControllerTest.java\n│                           │       ├── OrderControllerTest.java\n│                           │       ├── ProductControllerTest.java\n│                           │       └── UserControllerTest.java\n│                           ├── model/\n│                           │   └── service/\n│                           │       ├── EncryptionServiceTest.java\n│                           │       └── JWTServiceTest.java\n│                           └── service/\n│                               └── UserServiceTest.java\n└── pom.xml\n```\n\n## Instalasi\n\n1. **Clone repository ini:**\n\n   ```\n   git clone https://github.com/hendrowunga/E-Commerce-backend-SpringBoot.git\n   cd repository\n   ```\n\n2. **Build dan jalankan aplikasi:**\n\n   ```\n   mvn clean install\n   mvn spring-boot:run\n   ```\n\n3. **Akses aplikasi:**\n\n   Buka `http://localhost:8080` di web browser.\n\n## Penggunaan Endpoint\n- POST : http://localhost:8080/auth/register\n- POST : http://localhost:8080/auth/login\n- GET  : http://localhost:8080/order\n- GET  : http://localhost:8080/product\n- GET  : http://localhost:8080/user/{userId}/address\n- PUT  : http://localhost:8080/user/{userId}/address\n- PATCH: http://localhost:8080/user/{userId}/address/{addressId}\n\n### 1. AuthenticationController\n\n#### AuthenticationController.java\n\n```java\n@RestController\n@RequestMapping(\"/auth\")\npublic class AuthenticationController {\n\n    @Autowired\n    private JWTServices jwtServices;\n\n    @Autowired\n    private UserService userService;\n\n    @PostMapping(\"/register\")\n    public ResponseEntity\u003c?\u003e registerUser(@RequestBody LocalUser newUser) {\n        userService.saveUser(newUser);\n        return ResponseEntity.ok(\"User registered successfully\");\n    }\n\n    @PostMapping(\"/login\")\n    public ResponseEntity\u003c?\u003e loginUser(@RequestBody LocalUser loginUser) {\n        // Authenticate user\n        final String jwtToken = jwtServices.authenticate(loginUser.getUsername(), loginUser.getPassword());\n        return ResponseEntity.ok(new AuthResponse(jwtToken));\n    }\n}\n```\n\n### 2. OrderController\n\n#### OrderController.java\n\n```java\n@RestController\n@RequestMapping(\"/order\")\npublic class OrderController {\n\n    @Autowired\n    private OrderService orderService;\n\n    @GetMapping\n    public ResponseEntity\u003cList\u003cWebOrder\u003e\u003e getAllOrders() {\n        List\u003cWebOrder\u003e orders = orderService.getAllOrders();\n        return ResponseEntity.ok(orders);\n    }\n}\n```\n\n### 3. ProductController\n\n#### ProductController.java\n\n```java\n@RestController\n@RequestMapping(\"/product\")\npublic class ProductController {\n\n    @Autowired\n    private ProductService productService;\n\n    @GetMapping\n    public ResponseEntity\u003cList\u003cProduct\u003e\u003e getAllProducts() {\n        List\u003cProduct\u003e products = productService.getAllProducts();\n        return ResponseEntity.ok(products);\n    }\n}\n```\n\n### 4. UserController\n\n#### UserController.java \n\n```java\n\n@RestController\n@RequestMapping(\"/user\")\npublic class UserController {\n    private AddressDAO addressDAO;\n    private SimpMessagingTemplate simpMessagingTemplate;\n    private UserServices userServices;\n\n    public UserController(AddressDAO addressDAO,SimpMessagingTemplate simpMessagingTemplate,UserServices userServices) {\n        this.addressDAO = addressDAO;\n        this.simpMessagingTemplate=simpMessagingTemplate;\n        this.userServices=userServices;\n    }\n\n    @GetMapping(\"/{userId}/address\")\n    public ResponseEntity\u003cList\u003cAddress\u003e\u003e getAddress(@AuthenticationPrincipal LocalUser user, @PathVariable Long userId) {\n        if (!userServices.userHasPermissionToUser(user, userId)) {\n            return ResponseEntity.status(HttpStatus.FORBIDDEN).build();\n        }\n        return ResponseEntity.ok(addressDAO.findByUser_Id(userId));\n    }\n\n\n    @PutMapping(\"/{userId}/address\")\n    public ResponseEntity\u003cAddress\u003e putAddress(@AuthenticationPrincipal LocalUser user, @PathVariable Long userId, @RequestBody Address address) {\n        if (!userServices.userHasPermissionToUser(user, userId)) {\n            return ResponseEntity.status(HttpStatus.FORBIDDEN).build();\n        }\n        address.setId(null);\n        LocalUser refUser = new LocalUser();\n        refUser.setId(userId);\n        address.setUser(refUser);\n        Address savedAddress = addressDAO.save(address);\n        simpMessagingTemplate.convertAndSend(\"/topic/user/\" + userId + \"/address\",\n                new DataChange\u003c\u003e(DataChange.ChangeType.INSERT, address));\n        return ResponseEntity.ok(savedAddress);\n    }\n\n    @PatchMapping(\"/{userId}/address/{addressId}\")\n    public ResponseEntity\u003cAddress\u003e patchAddress(\n            @AuthenticationPrincipal LocalUser user, @PathVariable Long userId,\n            @PathVariable Long addressId, @RequestBody Address address) {\n        if (!userServices.userHasPermissionToUser(user, userId)) {\n            return ResponseEntity.status(HttpStatus.FORBIDDEN).build();\n        }\n        if (address.getId() == addressId) {\n            Optional\u003cAddress\u003e opOriginalAddress = addressDAO.findById(addressId);\n            if (opOriginalAddress.isPresent()) {\n                LocalUser originalUser = opOriginalAddress.get().getUser();\n                if (originalUser.getId() == userId) {\n                    address.setUser(originalUser);\n                    Address savedAddress = addressDAO.save(address);\n                    simpMessagingTemplate.convertAndSend(\"/topic/user/\" + userId + \"/address\",\n                            new DataChange\u003c\u003e(DataChange.ChangeType.UPDATE, address));\n                    return ResponseEntity.ok(savedAddress);\n                }\n            }\n        }\n        return ResponseEntity.badRequest().build();\n    }\n\n\n}\n```\n## Dokumentasi dan Referensi\n- Spring Boot Documentation: https://docs.spring.io/spring-boot/docs/current/reference/html/\n- Start Spring Boot: https://start.spring.io/\n- Stack Overflow: https://stackoverflow.com/\n\n\n\n## Hubungi Saya\n\nUntuk pertanyaan lebih lanjut atau diskusi, silakan hubungi saya melalui email di **hendrowunga073@gmail.com**.\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhendrowunga%2Fspringboot-monolithic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhendrowunga%2Fspringboot-monolithic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhendrowunga%2Fspringboot-monolithic/lists"}