go-restapi-login/models/models.go

107 lines
3.3 KiB
Go

package models
import (
"github.com/go-playground/validator/v10"
"go.mongodb.org/mongo-driver/bson/primitive"
"html/template"
"strings"
"time"
"unicode"
)
// Mongodb Type
type PreusersMongo struct {
ID primitive.ObjectID `bson:"_id,omitempty" json:"id,omitempty"`
Username string `bson:"username" json:"username" `
Email string `bson:"email" json:"email"`
HashPassword string `bson:"hash_password" json:"hash_password"`
PhoneNumber string `bson:"phone_number" json:"phone_number"`
CreatedDate time.Time `bson:"created_date" json:"created_date"`
UpdateDate time.Time `bson:"update_date" json:"update_date"`
VerifySentCount int `bson:"verify_sent_count" json:"verify_sent_count"`
}
type UsersMongo struct {
ID primitive.ObjectID `bson:"_id,omitempty" json:"id,omitempty"`
Username string `bson:"username" json:"username"`
Email string `bson:"email" json:"email"`
HashPassword string `bson:"hash_password" json:"hash_password"`
PhoneNumber string `bson:"phone_number" json:"phone_number"`
Active bool `bson:"active" json:"active"`
CreatedDate time.Time `bson:"created_date" json:"created_date"`
UpdateDate time.Time `bson:"update_date" json:"update_date"`
VerifySentCount int `bson:"verify_sent_count" json:"verify_sent_count"`
}
var Validate *validator.Validate
// API Type
type CreateUser struct {
Username string `json:"username" validate:"required,min=8,max=20"`
Email string `json:"email" validate:"required,email"`
Password string `json:"password" validate:"required,min=8,max=20,customPassword"`
ConfirmPassword string `json:"confirm_password" validate:"required,eqfield=Password"`
PhoneNumber string `json:"phone_number" validate:"required,len=10"`
}
type Users struct {
Username string `json:"username"`
Email string `json:"email"`
HashPassword string `json:"hash_password"`
PhoneNumber string `json:"phone_number"`
Active bool `json:"active"`
CreatedDate string `json:"created_date"`
ValidDate int `json:"verify_sent_count"`
}
// custom validator list
func PasswordValidator(fl validator.FieldLevel) bool {
password := fl.Field().String()
// Flags to track if at least one symbol and one number are found
hasSymbol := false
hasNumber := false
// Check if the password contains at least one symbol and one number
for _, char := range password {
if strings.ContainsRune("!@#$%^&*()-_=+[]{}|;:'\"<>,.?/~`", char) {
hasSymbol = true
} else if unicode.IsNumber(char) {
hasNumber = true
}
// Break early if both conditions are met
if hasSymbol && hasNumber {
return true
}
}
return false
}
//Interal Type
type OtpGenerate struct {
PureOTP string
HashOTP string
}
type MailVefiry struct {
LinkMail string
ImageBase64 string
}
type EmailTemplate struct {
Otp string `json:"otp"`
AlternativeLink string `json:"alternativeLink"`
QrCode template.URL
}
type RedisOTP struct {
Email string `json:"email"`
User string `json:"user"`
CreatedDate int64 `json:"created_date"`
HashOTP string `json:"hashOTP"`
}