101 lines
2.7 KiB
Go
101 lines
2.7 KiB
Go
package controler
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"linhdevtran99/rest-api/models"
|
|
"linhdevtran99/rest-api/rest-api/services"
|
|
"linhdevtran99/rest-api/utils"
|
|
"net/http"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
func RegisterNewAccount(w http.ResponseWriter, r *http.Request) error {
|
|
if r.Method == http.MethodPost {
|
|
var registerInfo models.CreateUser
|
|
|
|
// get data from body
|
|
_ = json.NewDecoder(r.Body).Decode(®isterInfo)
|
|
|
|
//call function check info user type in
|
|
_, responseAPI := services.CheckAndValidRegisterFiled(®isterInfo, w)
|
|
//[fairy ok]
|
|
|
|
if responseAPI != nil {
|
|
return utils.WriteJSON(w, responseAPI.Code, responseAPI.Err)
|
|
}
|
|
|
|
//call function check data user use in past or not
|
|
isError, responseAPI := services.CheckAccountValid(registerInfo.Username, registerInfo.Email)
|
|
|
|
if isError == true {
|
|
return utils.WriteJSON(w, responseAPI.Code, responseAPI.Err)
|
|
}
|
|
|
|
preUserData := &models.PreusersMongo{
|
|
Username: registerInfo.Username,
|
|
Email: registerInfo.Email,
|
|
PhoneNumber: registerInfo.PhoneNumber,
|
|
HashPassword: registerInfo.Password,
|
|
UUID: registerInfo.UUID,
|
|
CreatedDate: time.Now(),
|
|
UpdateDate: time.Now(),
|
|
VerifySentCount: 1,
|
|
}
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
var wg sync.WaitGroup
|
|
|
|
//otpChannel := make(chan models.OtpGenerate, 1)
|
|
//mailChannel := make(chan models.MailVefiry, 1)
|
|
done := make(chan struct{})
|
|
|
|
var pipelineError error
|
|
|
|
wg.Add(1)
|
|
counter, timerCreate := services.CheckAndWritePreuser(preUserData, &wg, cancel, pipelineError)
|
|
fmt.Println("counter", counter)
|
|
fmt.Println("timerCreate", timerCreate)
|
|
time.Sleep(20 * time.Second)
|
|
cancel()
|
|
//wg.Add(1)
|
|
//go utils.GenOTP(preUserData, counter, 6, w, otpChannel, pipelineError, cancel, &wg)
|
|
//wg.Add(1)
|
|
////go utils.EncryptAESMailLink(preUserData, w, mailChannel, &wg, timerCreate)
|
|
////wg.Add(1)
|
|
////go services.CreateMailVerify(preUserData, otpChannel, mailChannel, w, errChan)
|
|
////go services.WriteOTPInRedis(counter, preUserData, otpChannel, w)
|
|
////wg.Done()
|
|
////err := <-errChan
|
|
////close(errChan)
|
|
////if err != nil {
|
|
//// fmt.Println("Internal Log: Fail to send email check smtp")
|
|
//// return err
|
|
////}
|
|
////if err == nil {
|
|
//// _ = utils.WriteJSON(w, http.StatusOK, models.SuccessAPI{
|
|
//// Message: "Success register account please verify your account",
|
|
//// })
|
|
////}
|
|
////
|
|
wg.Wait()
|
|
////create dummy error
|
|
//err = fmt.Errorf("dummy error")
|
|
select {
|
|
case <-done:
|
|
// Error occurred, wait for all goroutines to finish
|
|
wg.Wait()
|
|
case <-ctx.Done():
|
|
// Context cancelled, wait for all goroutines to finish
|
|
wg.Wait()
|
|
}
|
|
return nil
|
|
|
|
}
|
|
return nil
|
|
}
|