From 8fd71bed8b4cc9f53eb66b36861f018e6610af92 Mon Sep 17 00:00:00 2001
From: KronosDP <darrel.danadyaksa19@gmail.com>
Date: Wed, 26 Feb 2025 13:44:24 +0700
Subject: [PATCH] [GREEN] Add AuthenticationController with user registration
 and login endpoints

---
 .../controller/AuthenticationController.java  | 90 +++++++++++++++++++
 1 file changed, 90 insertions(+)
 create mode 100644 src/main/java/com/safetypin/authentication/controller/AuthenticationController.java

diff --git a/src/main/java/com/safetypin/authentication/controller/AuthenticationController.java b/src/main/java/com/safetypin/authentication/controller/AuthenticationController.java
new file mode 100644
index 0000000..9b09ad8
--- /dev/null
+++ b/src/main/java/com/safetypin/authentication/controller/AuthenticationController.java
@@ -0,0 +1,90 @@
+package com.safetypin.authentication.controller;
+
+import com.safetypin.authentication.dto.PasswordResetRequest;
+import com.safetypin.authentication.dto.RegistrationRequest;
+import com.safetypin.authentication.dto.SocialLoginRequest;
+import com.safetypin.authentication.exception.InvalidCredentialsException;
+import com.safetypin.authentication.model.User;
+import com.safetypin.authentication.service.AuthenticationService;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import jakarta.validation.Valid;
+import com.safetypin.authentication.dto.ErrorResponse;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/api/auth")
+public class AuthenticationController {
+
+    private final AuthenticationService authenticationService;
+
+    public AuthenticationController(AuthenticationService authenticationService) {
+        this.authenticationService = authenticationService;
+    }
+
+
+    // Endpoint for email registration
+    @PostMapping("/register-email")
+    public User registerEmail(@Valid @RequestBody RegistrationRequest request) {
+        return authenticationService.registerUser(request);
+    }
+
+    // Endpoint for social registration/login
+    @PostMapping("/register-social")
+    public User registerSocial(@Valid @RequestBody SocialLoginRequest request) {
+        return authenticationService.socialLogin(request);
+    }
+
+    // OTP verification endpoint
+    @PostMapping("/verify-otp")
+    public String verifyOTP(@RequestParam String email, @RequestParam String otp) {
+        boolean verified = authenticationService.verifyOTP(email, otp);
+        return verified ? "User verified successfully" : "OTP verification failed";
+    }
+
+
+
+    // Endpoint for email login
+    @PostMapping("/login-email")
+    public ResponseEntity<?> loginEmail(@RequestParam String email, @RequestParam String password) {
+        try {
+            return ResponseEntity.ok(authenticationService.loginUser(email, password));
+        } catch (InvalidCredentialsException e){
+            //TODO
+            return ResponseEntity.status(HttpStatus.UNAUTHORIZED)
+                    .body(e.getMessage());
+        }
+
+    }
+
+    // Endpoint for social login
+    @PostMapping("/login-social")
+    public User loginSocial(@RequestParam String email) {
+        return authenticationService.loginSocial(email);
+    }
+
+
+
+
+    // Endpoint for forgot password (only for email users)
+    @PostMapping("/forgot-password")
+    public String forgotPassword(@Valid @RequestBody PasswordResetRequest request) {
+        authenticationService.forgotPassword(request.getEmail());
+        return "Password reset instructions have been sent to your email (simulated)";
+    }
+
+
+
+
+    // Endpoint simulating a content post that requires a verified account
+    @PostMapping("/post")
+    public String postContent(@RequestParam String email, @RequestParam String content) {
+        return authenticationService.postContent(email, content);
+    }
+
+    // On successful login, return an empty map as a placeholder for future reports
+    @GetMapping("/dashboard")
+    public String dashboard() {
+        return "{}";
+    }
+}
-- 
GitLab