/loginPOST/login/api/login)username y password. Verifica existencia, estado activo (status: true), correo confirmado (confirmEmail: true) y validez de la contraseña. Si es exitoso, genera y devuelve un token JWT.validateSellerLogin (valida campos username y password)validateRequest (manejo de errores de validación){
"username": "string (requerido)",
"password": "string (requerido)"
}{
"status": "success",
"code": "LOGIN_SUCCESS",
"msg": "Inicio de sesión exitoso para '{username}'.",
"data": {
"seller": {
"_id": "ObjectId",
"username": "string",
"email": "string",
"names": "string",
"lastNames": "string",
"role": "string",
"SalesCity": "string"
},
"token": "string (JWT)"
}
}{
"status": "error",
"code": "MISSING_FIELD", // o "VALIDATION_ERROR"
"msg": "Los campos 'username' y 'password' son obligatorios."
// "errors": [...] // si viene de validateRequest
}{
"status": "error",
"code": "INVALID_CREDENTIALS",
"msg": "Contraseña incorrecta."
}{
"status": "error",
"code": "EMAIL_NOT_CONFIRMED",
"msg": "Debes confirmar tu correo electrónico antes de iniciar sesión."
}{
"status": "error",
"code": "ACCOUNT_DISABLED",
"msg": "La cuenta del vendedor '{username}' está desactivada."
}{
"status": "error",
"code": "NOT_FOUND",
"msg": "Usuario '{username}' no encontrado."
}{
"status": "error",
"code": "SERVER_ERROR",
"msg": "Ha ocurrido un error inesperado al iniciar sesión. Intente de nuevo más tarde.",
"info": {
"detail": "Mensaje específico del error interno (ej: 'Database query failed')"
}
}curl --location --request POST 'https://back-prima-s-a.onrender.com/api/login' \
--header 'User-Agent: insomnia/10.3.0' \
--header 'Content-Type: application/json' \
--data-raw '{
"username": "SellerUser",
"password": "123456"
}'{}