jhjv / app /forms.py
Youssouf ⚜️
edfgh
08ec4c0
from flask_wtf import FlaskForm
from wtforms import (
StringField,
PasswordField,
SelectField,
SubmitField,
FloatField,
TextAreaField,
)
from wtforms.validators import (
DataRequired,
Length,
EqualTo,
ValidationError,
NumberRange,
)
from flask_login import current_user
from app.models import User
import re
def validate_phone(form, field):
phone = field.data
country_code = form.country_code.data if hasattr(form, "country_code") else None
if not re.match(r"^\d+$", phone):
raise ValidationError(
"Le numéro de téléphone ne doit contenir que des chiffres."
)
if len(phone) < 8 or len(phone) > 15:
raise ValidationError(
"Le numéro de téléphone doit contenir entre 8 et 15 chiffres."
)
def validate_password(form, field):
password = field.data
if len(password) < 8:
raise ValidationError("Le mot de passe doit contenir au moins 8 caractères.")
if not re.search(r"[A-Z]", password):
raise ValidationError("Le mot de passe doit contenir au moins une majuscule.")
if not re.search(r"\d", password):
raise ValidationError("Le mot de passe doit contenir au moins un chiffre.")
class LoginForm(FlaskForm):
phone = StringField("Téléphone", validators=[DataRequired(), validate_phone])
password = PasswordField("Mot de passe", validators=[DataRequired()])
country_code = SelectField(
"Pays",
choices=[
("+228", "Togo (+228)"),
("+229", "Bénin (+229)"),
("+226", "Burkina Faso (+226)"),
("+225", "Côte d'Ivoire (+225)"),
("+224", "Guinée (+224)"),
("+223", "Mali (+223)"),
("+221", "Sénégal (+221)"),
("+237", "Cameroun (+237)"),
("+241", "Gabon (+241)"),
],
validators=[DataRequired()],
)
submit = SubmitField("Se connecter")
class RegistrationForm(FlaskForm):
name = StringField(
"Nom / Pseudo",
validators=[
DataRequired(message="Le nom est requis"),
Length(
min=2, max=50, message="Le nom doit contenir entre 2 et 50 caractères"
),
],
)
phone = StringField("Téléphone", validators=[DataRequired(), validate_phone])
password = PasswordField(
"Mot de passe", validators=[DataRequired(), validate_password]
)
confirm_password = PasswordField(
"Confirmer le mot de passe",
validators=[
DataRequired(),
EqualTo("password", message="Les mots de passe ne correspondent pas"),
],
)
country_code = SelectField(
"Pays",
choices=[
("+228", "Togo (+228)"),
("+229", "Bénin (+229)"),
("+226", "Burkina Faso (+226)"),
("+225", "Côte d'Ivoire (+225)"),
("+224", "Guinée (+224)"),
("+223", "Mali (+223)"),
("+221", "Sénégal (+221)"),
("+237", "Cameroun (+237)"),
("+241", "Gabon (+241)"),
],
validators=[DataRequired()],
)
referral_code = StringField("Code de parrainage (optionnel)")
submit = SubmitField("S'inscrire")
def validate_phone(self, field):
phone = field.data
country_code = self.country_code.data
full_phone = country_code + phone
if User.query.filter_by(phone=phone).first():
raise ValidationError("Ce numéro de téléphone est déjà utilisé.")
class DepositForm(FlaskForm):
amount = FloatField(
"Montant (FCFA)",
validators=[
DataRequired(),
NumberRange(min=100, message="Le montant minimum est de 100 FCFA"),
],
)
submit = SubmitField("Déposer")
class WithdrawalForm(FlaskForm):
amount = FloatField(
"Montant (FCFA)",
validators=[
DataRequired(),
NumberRange(
min=500, message="Le montant minimum de retrait est de 500 FCFA"
),
],
)
phone = StringField(
"Téléphone de destination", validators=[DataRequired(), validate_phone]
)
country_code = SelectField(
"Pays",
choices=[
("+228", "Togo (+228)"),
("+229", "Bénin (+229)"),
("+226", "Burkina Faso (+226)"),
("+225", "Côte d'Ivoire (+225)"),
("+224", "Guinée (+224)"),
("+223", "Mali (+223)"),
("+221", "Sénégal (+221)"),
("+237", "Cameroun (+237)"),
("+241", "Gabon (+241)"),
],
validators=[DataRequired()],
)
submit = SubmitField("Retirer")