Hub-Api/services/authentication/login.go

75 lines
1.6 KiB
Go

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")
}
}