chore: add user id to mail

This commit is contained in:
kekskurse 2025-03-13 21:42:39 +01:00
parent 7b5df08e45
commit 0b192b8f7e
7 changed files with 74 additions and 12 deletions

View file

@ -6,4 +6,5 @@ var (
ErrUserHasInvalideChars = errors.New("username has invalide chars")
ErrUsernameIsTaken = errors.New("username already takebn")
ErrPasswordNotComplexEnough = errors.New("password not complex enough")
ErrCantCreateUser = errors.New("cant create user")
)

View file

@ -32,6 +32,18 @@ func (m Miniauth) RegisterUser(username string, mail string, password string) er
return utils.WrapError(ErrPasswordNotComplexEnough, err, log)
}
id, err := m.store.UserWrite(username, password)
if err != nil {
return utils.WrapError(ErrCantCreateUser, err, log)
}
log = log.With().Int64("userid", id).Logger()
err = m.store.MailAdd(mail, id, true)
if err != nil {
return utils.WrapError(ErrCantCreateUser, err, log)
}
return nil
}

View file

@ -7,6 +7,43 @@ import (
"github.com/stretchr/testify/assert"
)
func TestRegistration(t *testing.T) {
tts := []struct {
name string
username string
password string
mail string
exptErr error
exptErrString string
}{
{
name: "invaloid username",
username: "abc",
password: "2b7B3Wm0KwIZ$Uvtc$!VOb",
mail: "mail@kekskurse.de",
exptErr: ErrUserHasInvalideChars,
exptErrString: "username has invalide chars: username has invalide chars",
},
{
name: "invaloid password",
username: "kekskurse",
password: "abc123d",
mail: "mail@kekskurse.de",
exptErr: ErrPasswordNotComplexEnough,
exptErrString: "password not complex enough: Password length must be not lower that 15 chars",
},
}
ma := getMiniAuth(t)
for _, tt := range tts {
t.Run(tt.name, func(t *testing.T) {
err := ma.RegisterUser(tt.username, tt.mail, tt.password)
assert.ErrorIs(t, err, tt.exptErr)
assert.Equal(t, tt.exptErrString, err.Error())
})
}
}
func TestPasswordCheck(t *testing.T) {
tts := []struct {
name string

View file

@ -5,12 +5,12 @@ import (
"github.com/google/uuid"
)
func (s Store) MailAdd(mail string, primary bool) error {
query := "INSERT INTO mail (mail, validationCode, isPrimary) VALUES (?, ?, ?);"
log := s.log.With().Str("func", "MailAdd").Str("mail", mail).Bool("primary", primary).Str("query", query).Logger()
func (s Store) MailAdd(mail string, userID int64, primary bool) error {
query := "INSERT INTO mail (mail, user_id, validation_code, is_primary) VALUES (?, ?, ?, ?);"
log := s.log.With().Str("func", "MailAdd").Int64("user_id", userID).Str("mail", mail).Bool("primary", primary).Str("query", query).Logger()
validatenCode := uuid.NewString()
_, err := s.db.Exec(query, mail, validatenCode, primary)
_, err := s.db.Exec(query, mail, userID, validatenCode, primary)
if err != nil {
return utils.WrapError(ErrCantExecuteQuery, err, log)
}

View file

@ -10,9 +10,13 @@ func TestAddMail(t *testing.T) {
store, err := NewDummyStore()
assert.Nil(t, err, "[setup] should be abel to create dummystore")
_, err = store.UserWrite("kekskurse", "kekskurse")
assert.Nil(t, err, "[setup] should be abel to store user")
tts := []struct {
name string
mail string
user_id int64
primearyMail bool
ExptErr error
ExptErrString string
@ -20,11 +24,13 @@ func TestAddMail(t *testing.T) {
{
name: "test-add-first-mail",
mail: "mail1@kekskurse.de",
user_id: 1,
primearyMail: false,
},
{
name: "test-add-mail-again-should-return-error",
mail: "mail1@kekskurse.de",
user_id: 1,
primearyMail: false,
ExptErr: ErrCantExecuteQuery,
ExptErrString: "cant execute query: constraint failed: UNIQUE constraint failed: mail.mail (2067)",
@ -33,7 +39,7 @@ func TestAddMail(t *testing.T) {
for _, tt := range tts {
t.Run(tt.name, func(t *testing.T) {
err := store.MailAdd(tt.mail, tt.primearyMail)
err := store.MailAdd(tt.mail, tt.user_id, tt.primearyMail)
if tt.ExptErr == nil {
assert.Nil(t, err)
} else {
@ -45,7 +51,7 @@ func TestAddMail(t *testing.T) {
var validateCode string
isValidated = true
err = store.db.QueryRow("SELECT validationCode, isValidated FROM mail WHERE mail = ?", tt.mail).Scan(&validateCode, &isValidated)
err = store.db.QueryRow("SELECT validation_code, is_validated FROM mail WHERE mail = ?", tt.mail).Scan(&validateCode, &isValidated)
assert.Nil(t, err, "should get mail infos from db without error")
assert.False(t, isValidated, "mail should not be validated")
assert.NotEmpty(t, validateCode, "validaten code should not be empty")

View file

@ -11,9 +11,12 @@ CREATE TABLE mail (
id INTEGER PRIMARY KEY AUTOINCREMENT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
user_id INTEGER NOT NULL,
mail TEXT NOT NULL UNIQUE,
validationCode TEXT NOT NULL UNIQUE,
isValidated BOOLEAN NOT NULL DEFAULT 0,
isPrimary BOOLEAN NOT NULL DEFAULT 0
validation_code TEXT NOT NULL UNIQUE,
is_validated BOOLEAN NOT NULL DEFAULT 0,
is_primary BOOLEAN NOT NULL DEFAULT 0,
FOREIGN KEY(user_id) REFERENCES users(id)
);

View file

@ -16,8 +16,11 @@ CREATE TABLE mail (
id INTEGER PRIMARY KEY AUTOINCREMENT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
user_id INTEGER NOT NULL,
mail TEXT NOT NULL UNIQUE,
validationCode TEXT NOT NULL UNIQUE,
isValidated BOOLEAN NOT NULL DEFAULT 0,
isPrimary BOOLEAN NOT NULL DEFAULT 0
validation_code TEXT NOT NULL UNIQUE,
is_validated BOOLEAN NOT NULL DEFAULT 0,
is_primary BOOLEAN NOT NULL DEFAULT 0,
FOREIGN KEY(user_id) REFERENCES users(id)
);