package authentication import ( "net/http" "netina/database" "netina/models" u "netina/queries" user_repository "netina/repositories/user" sms "netina/services" "netina/validation" "github.com/labstack/echo/v4" ) func RequestCode(c echo.Context) error { db := database.Db() gc := NewGenerateCode(&db) phoneNumber := new(models.CreatePhoneNumber) if err := c.Bind(phoneNumber); err != nil { return c.JSON(http.StatusBadRequest, map[string]string{"error": "Invalid request payload"}) } if err := validation.ValidateStruct(phoneNumber); err != nil { return c.JSON(http.StatusBadRequest, map[string]string{"error": err.Error()}) } loginCode ,err := gc.CreateLoginCode(phoneNumber.PhoneNumber) if err != nil { return err } sms.Sms(phoneNumber.PhoneNumber , loginCode) return nil } func Login(c echo.Context) error { db := database.Db() code := new(models.LoginCode) if err := c.Bind(code); err != nil { return err } if err := validation.ValidateStruct(code); err != nil { return c.JSON(http.StatusBadRequest, map[string]string{"error": err.Error()}) } gc := NewGenerateCode(&db) if gc.VerifyLoginCode(code.PhoneNumber , code.Code) == nil { ur := user_repository.UserQueryRepository{DB: &db} userHandller := u.GetUserByPhoneNumberHandler{Repository: ur} user , err := userHandller.Handle(code.PhoneNumber) if err != nil { return c.JSON(http.StatusNotFound , "user not found") } token , err:= GenerateTokenForUser(user.User_id) if err != nil { return err } return c.JSON(http.StatusAccepted , token) } else { return c.JSON(http.StatusBadRequest , "invalid Request") } }