Improve SQL
This commit is contained in:
parent
69ecae6c26
commit
40ed60bca6
@ -61,27 +61,17 @@ func (ss *SessionService) Create(userID int) (*Session, error) {
|
|||||||
Token: token,
|
Token: token,
|
||||||
TokenHash: hash(token),
|
TokenHash: hash(token),
|
||||||
}
|
}
|
||||||
|
|
||||||
row := ss.DB.QueryRow(`
|
row := ss.DB.QueryRow(`
|
||||||
UPDATE sessions
|
|
||||||
SET token_hash = $2
|
|
||||||
WHERE user_id = $1
|
|
||||||
RETURNING id;
|
|
||||||
`, session.UserID, session.TokenHash)
|
|
||||||
err = row.Scan(&session.ID)
|
|
||||||
if err == sql.ErrNoRows {
|
|
||||||
row = ss.DB.QueryRow(`
|
|
||||||
INSERT INTO sessions (user_id, token_hash)
|
INSERT INTO sessions (user_id, token_hash)
|
||||||
VALUES ($1, $2)
|
VALUES ($1, $2) ON CONFLICT (user_id) DO
|
||||||
|
UPDATE
|
||||||
|
SET token_hash = $2
|
||||||
RETURNING id;
|
RETURNING id;
|
||||||
`, session.UserID, session.TokenHash)
|
`, session.UserID, session.TokenHash)
|
||||||
err = row.Scan(&session.ID)
|
err = row.Scan(&session.ID)
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("create: %w", err)
|
return nil, fmt.Errorf("create: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &session, nil
|
return &session, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,20 +87,19 @@ func (ss *SessionService) Delete(token string) error {
|
|||||||
func (ss *SessionService) User(token string) (*User, error) {
|
func (ss *SessionService) User(token string) (*User, error) {
|
||||||
token_hash := hash(token)
|
token_hash := hash(token)
|
||||||
var user User
|
var user User
|
||||||
|
|
||||||
row := ss.DB.QueryRow(`
|
row := ss.DB.QueryRow(`
|
||||||
SELECT (user_id) FROM sessions WHERE token_hash = $1;
|
SELECT users.id,
|
||||||
|
users.email,
|
||||||
|
users.password_hash
|
||||||
|
FROM sessions
|
||||||
|
JOIN users ON users.id = sessions.user_id
|
||||||
|
WHERE sessions.token_hash = $1;
|
||||||
`, token_hash)
|
`, token_hash)
|
||||||
err := row.Scan(&user.ID)
|
err := row.Scan(&user.ID, &user.Email, &user.PasswordHash)
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("user: %w", err)
|
|
||||||
}
|
|
||||||
row = ss.DB.QueryRow(`
|
|
||||||
SELECT email, password_hash
|
|
||||||
FROM users WHERE id = $1;
|
|
||||||
`, user.ID)
|
|
||||||
err = row.Scan(&user.Email, &user.PasswordHash)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("user: %w", err)
|
return nil, fmt.Errorf("user: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &user, err
|
return &user, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
CREATE TABLE sessions (
|
CREATE TABLE sessions (
|
||||||
id SERIAL PRIMARY KEY,
|
id SERIAL PRIMARY KEY,
|
||||||
user_id INT UNIQUE,
|
user_id INT UNIQUE REFERENCES users (id) ON DELETE CASCADE,
|
||||||
token_hash TEXT UNIQUE NOT NULL
|
token_hash TEXT UNIQUE NOT NULL
|
||||||
);
|
);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user