168 lines
4.9 KiB
Go
168 lines
4.9 KiB
Go
package handlers
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"go-microservices/api-gateway/internal/clients"
|
|
pb "go-microservices/proto/auth"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
type AuthHandler struct {
|
|
AuthClient *clients.AuthClient
|
|
}
|
|
|
|
func NewAuthHandler(authClient *clients.AuthClient) *AuthHandler {
|
|
return &AuthHandler{AuthClient: authClient}
|
|
}
|
|
|
|
func (h *AuthHandler) SignUp(c *fiber.Ctx) error {
|
|
var req pb.SignUpRequest
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "invalid request"})
|
|
}
|
|
resp, err := h.AuthClient.SignUp(context.Background(), &req)
|
|
if err != nil {
|
|
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
|
}
|
|
return c.JSON(resp)
|
|
}
|
|
|
|
func (h *AuthHandler) SignIn(c *fiber.Ctx) error {
|
|
var req pb.SignInRequest
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "invalid request"})
|
|
}
|
|
resp, err := h.AuthClient.SignIn(context.Background(), &req)
|
|
if err != nil {
|
|
return c.Status(http.StatusUnauthorized).JSON(fiber.Map{"error": err.Error()})
|
|
}
|
|
return c.JSON(resp)
|
|
}
|
|
|
|
func (h *AuthHandler) ValidateToken(c *fiber.Ctx) error {
|
|
var req pb.ValidateTokenRequest
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "invalid request"})
|
|
}
|
|
resp, err := h.AuthClient.ValidateToken(context.Background(), &req)
|
|
if err != nil {
|
|
return c.Status(http.StatusUnauthorized).JSON(fiber.Map{"error": err.Error()})
|
|
}
|
|
return c.JSON(resp)
|
|
}
|
|
|
|
func (h *AuthHandler) GetUserInfo(c *fiber.Ctx) error {
|
|
var req pb.GetUserInfoRequest
|
|
if err := c.BodyParser(&req); err != nil {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "invalid request"})
|
|
}
|
|
resp, err := h.AuthClient.GetUserInfo(context.Background(), &req)
|
|
if err != nil {
|
|
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
|
}
|
|
return c.JSON(resp)
|
|
}
|
|
|
|
// CreateTest forwards a test creation request to the auth service
|
|
func (h *AuthHandler) CreateTest(c *fiber.Ctx) error {
|
|
var body struct {
|
|
Test string `json:"test"`
|
|
}
|
|
if err := c.BodyParser(&body); err != nil {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "invalid request"})
|
|
}
|
|
req := pb.CreateTestRequest{Content: body.Test}
|
|
resp, err := h.AuthClient.CreateTest(context.Background(), &req)
|
|
if err != nil {
|
|
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
|
}
|
|
return c.JSON(resp)
|
|
}
|
|
|
|
// ListTests retrieves tests from the auth service
|
|
func (h *AuthHandler) ListTests(c *fiber.Ctx) error {
|
|
resp, err := h.AuthClient.ListTests(context.Background(), &pb.ListTestsRequest{})
|
|
if err != nil {
|
|
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
|
}
|
|
return c.JSON(resp)
|
|
}
|
|
|
|
// GetTest retrieves a single test by ID
|
|
func (h *AuthHandler) GetTest(c *fiber.Ctx) error {
|
|
id := c.Params("id")
|
|
if id == "" {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "test id required"})
|
|
}
|
|
|
|
var testID uint64
|
|
_, err := fmt.Sscanf(id, "%d", &testID)
|
|
if err != nil {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "invalid test id"})
|
|
}
|
|
|
|
resp, err := h.AuthClient.GetTest(context.Background(), &pb.GetTestRequest{Id: testID})
|
|
if err != nil {
|
|
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
|
}
|
|
return c.JSON(resp)
|
|
}
|
|
|
|
// UpdateTest updates a test by ID
|
|
func (h *AuthHandler) UpdateTest(c *fiber.Ctx) error {
|
|
id := c.Params("id")
|
|
if id == "" {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "test id required"})
|
|
}
|
|
|
|
var testID uint64
|
|
_, err := fmt.Sscanf(id, "%d", &testID)
|
|
if err != nil {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "invalid test id"})
|
|
}
|
|
|
|
var body struct {
|
|
Content string `json:"content"`
|
|
}
|
|
if err := c.BodyParser(&body); err != nil {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "invalid request"})
|
|
}
|
|
|
|
if body.Content == "" {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "content required"})
|
|
}
|
|
|
|
resp, err := h.AuthClient.UpdateTest(context.Background(), &pb.UpdateTestRequest{
|
|
Id: testID,
|
|
Content: body.Content,
|
|
})
|
|
if err != nil {
|
|
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
|
}
|
|
return c.JSON(resp)
|
|
}
|
|
|
|
// DeleteTest deletes a test by ID
|
|
func (h *AuthHandler) DeleteTest(c *fiber.Ctx) error {
|
|
id := c.Params("id")
|
|
if id == "" {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "test id required"})
|
|
}
|
|
|
|
var testID uint64
|
|
_, err := fmt.Sscanf(id, "%d", &testID)
|
|
if err != nil {
|
|
return c.Status(http.StatusBadRequest).JSON(fiber.Map{"error": "invalid test id"})
|
|
}
|
|
|
|
resp, err := h.AuthClient.DeleteTest(context.Background(), &pb.DeleteTestRequest{Id: testID})
|
|
if err != nil {
|
|
return c.Status(http.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
|
}
|
|
return c.JSON(resp)
|
|
}
|