init
This commit is contained in:
108
internal/storage/user.go
Normal file
108
internal/storage/user.go
Normal file
@@ -0,0 +1,108 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/jackc/pgx/v5"
|
||||
"madsky.ru/go-tracker/internal/database"
|
||||
"madsky.ru/go-tracker/internal/model/user"
|
||||
)
|
||||
|
||||
type UserRepository interface {
|
||||
FindByEmail(ctx context.Context, email string) (*user.User, error)
|
||||
FindById(ctx context.Context, id uint32) (*user.User, error)
|
||||
Create(ctx context.Context, user *user.User) (*user.User, error)
|
||||
IsEmpty(ctx context.Context) (bool, error)
|
||||
Update(ctx context.Context, id uint32, dto *user.UpdateUserDTO) (*user.User, error)
|
||||
//Find(ctx context.Context) ([]*user.User, error)
|
||||
//FindOne(ctx context.Context, id uint64) (*user.User, error)
|
||||
//Create(ctx context.Context, dto *user.CreateUserDTO) (*user.User, error)
|
||||
//Remove(ctx context.Context, id uint64) (uint64, error)
|
||||
}
|
||||
|
||||
type UserStore struct {
|
||||
client database.Client
|
||||
}
|
||||
|
||||
func (us *UserStore) FindById(ctx context.Context, id uint32) (*user.User, error) {
|
||||
query := `select id, email, name, password_hash, role
|
||||
from users
|
||||
where id = $1`
|
||||
|
||||
rows, _ := us.client.Query(ctx, query, id)
|
||||
defer rows.Close()
|
||||
|
||||
u, err := pgx.CollectOneRow(rows, pgx.RowToStructByName[user.User])
|
||||
if err != nil {
|
||||
fmt.Println("CollectOneRow FindById User", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &u, nil
|
||||
}
|
||||
|
||||
func (us *UserStore) FindByEmail(ctx context.Context, email string) (*user.User, error) {
|
||||
query := `select id, email, name, password_hash, role
|
||||
from users
|
||||
where email = $1`
|
||||
|
||||
rows, _ := us.client.Query(ctx, query, email)
|
||||
defer rows.Close()
|
||||
|
||||
u, err := pgx.CollectOneRow(rows, pgx.RowToStructByName[user.User])
|
||||
if err != nil {
|
||||
fmt.Println("CollectOneRow FindByEmail User", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &u, nil
|
||||
}
|
||||
|
||||
func (us *UserStore) IsEmpty(ctx context.Context) (bool, error) {
|
||||
query := "select count(id) from users limit 1"
|
||||
|
||||
rows, _ := us.client.Query(ctx, query)
|
||||
defer rows.Close()
|
||||
|
||||
count, err := pgx.CollectOneRow(rows, pgx.RowTo[int])
|
||||
if err != nil {
|
||||
fmt.Println("CollectOneRow IsEmpty User", err)
|
||||
return false, err
|
||||
}
|
||||
|
||||
return count == 0, nil
|
||||
}
|
||||
|
||||
func (us *UserStore) Create(ctx context.Context, dto *user.User) (*user.User, error) {
|
||||
query := `insert into users (email, name, password_hash, role)
|
||||
values ($1, $2, $3, $4)
|
||||
returning id, name, email, password_hash, role`
|
||||
rows, _ := us.client.Query(ctx, query, dto.Email, dto.Name, dto.PasswordHash, dto.Role)
|
||||
defer rows.Close()
|
||||
|
||||
u, err := pgx.CollectOneRow(rows, pgx.RowToStructByName[user.User])
|
||||
if err != nil {
|
||||
fmt.Println("CollectOneRow Create User", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &u, nil
|
||||
}
|
||||
|
||||
func (us *UserStore) Update(ctx context.Context, id uint32, dto *user.UpdateUserDTO) (*user.User, error) {
|
||||
query := `update users
|
||||
set name = $1
|
||||
where id = $2
|
||||
returning id, email, name, password_hash, role`
|
||||
|
||||
rows, _ := us.client.Query(ctx, query, dto.Name, id)
|
||||
defer rows.Close()
|
||||
|
||||
u, err := pgx.CollectOneRow(rows, pgx.RowToStructByName[user.User])
|
||||
if err != nil {
|
||||
fmt.Println("CollectOneRow Update User", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &u, nil
|
||||
}
|
||||
Reference in New Issue
Block a user