add triggers for users table
This commit is contained in:
parent
abf0ff77f0
commit
cdd9627af3
@ -16,9 +16,9 @@ type createUserInput struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type createUserOutput struct {
|
type createUserOutput struct {
|
||||||
Id string `json:"id"`
|
Id string `json:"id"`
|
||||||
Email string `json:"email"`
|
Email string `json:"email"`
|
||||||
Name string `json:"name"`
|
FullName string `json:"fullName"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUserCreateHandler(log logger.Logger, userService services.UserService) gin.HandlerFunc {
|
func NewUserCreateHandler(log logger.Logger, userService services.UserService) gin.HandlerFunc {
|
||||||
@ -37,9 +37,9 @@ func NewUserCreateHandler(log logger.Logger, userService services.UserService) g
|
|||||||
}
|
}
|
||||||
|
|
||||||
return createUserOutput{
|
return createUserOutput{
|
||||||
Id: user.Id,
|
Id: user.Id,
|
||||||
Email: user.Email,
|
Email: user.Email,
|
||||||
Name: user.Name,
|
FullName: user.FullName,
|
||||||
}, nil
|
}, nil
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
@ -5,10 +5,10 @@ type UserDTO struct {
|
|||||||
Email string
|
Email string
|
||||||
EmailVerified bool
|
EmailVerified bool
|
||||||
Secret string
|
Secret string
|
||||||
Name string
|
FullName string
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserUpdateDTO struct {
|
type UserUpdateDTO struct {
|
||||||
Secret string
|
Secret string
|
||||||
Name string
|
FullName string
|
||||||
}
|
}
|
||||||
|
|||||||
@ -38,8 +38,8 @@ func (u *userRepo) CreateUser(ctx context.Context, dto models.UserDTO) (*models.
|
|||||||
_, span := u.tracer.Start(ctx, "postgres::CreateUser")
|
_, span := u.tracer.Start(ctx, "postgres::CreateUser")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
|
|
||||||
query := `insert into users (email, secret, name) values ($1, $2, $3) returning id;`
|
query := `insert into users (email, secret, full_name) values ($1, $2, $3) returning id;`
|
||||||
row := u.db.QueryRowContext(ctx, query, dto.Email, dto.Secret, dto.Name)
|
row := u.db.QueryRowContext(ctx, query, dto.Email, dto.Secret, dto.FullName)
|
||||||
|
|
||||||
id := ""
|
id := ""
|
||||||
if err := row.Scan(&id); err != nil {
|
if err := row.Scan(&id); err != nil {
|
||||||
@ -47,10 +47,10 @@ func (u *userRepo) CreateUser(ctx context.Context, dto models.UserDTO) (*models.
|
|||||||
}
|
}
|
||||||
|
|
||||||
return &models.UserDTO{
|
return &models.UserDTO{
|
||||||
Id: id,
|
Id: id,
|
||||||
Email: dto.Email,
|
Email: dto.Email,
|
||||||
Secret: dto.Secret,
|
Secret: dto.Secret,
|
||||||
Name: dto.Name,
|
FullName: dto.FullName,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,8 +58,8 @@ func (u *userRepo) UpdateUser(ctx context.Context, userId string, dto models.Use
|
|||||||
_, span := u.tracer.Start(ctx, "postgres::UpdateUser")
|
_, span := u.tracer.Start(ctx, "postgres::UpdateUser")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
|
|
||||||
query := `update users set secret=$1, name=$2 where id = $3;`
|
query := `update users set secret=$1, full_name=$2 where id = $3;`
|
||||||
_, err := u.db.ExecContext(ctx, query, dto.Secret, dto.Name, userId)
|
_, err := u.db.ExecContext(ctx, query, dto.Secret, dto.FullName, userId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -84,11 +84,11 @@ func (u *userRepo) GetUserById(ctx context.Context, id string) (*models.UserDTO,
|
|||||||
_, span := u.tracer.Start(ctx, "postgres::GetUserById")
|
_, span := u.tracer.Start(ctx, "postgres::GetUserById")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
|
|
||||||
query := `select id, email, secret, name, email_verified from users where id = $1;`
|
query := `select id, email, secret, full_name, email_verified from users where id = $1;`
|
||||||
row := u.db.QueryRowContext(ctx, query, id)
|
row := u.db.QueryRowContext(ctx, query, id)
|
||||||
|
|
||||||
dto := &models.UserDTO{}
|
dto := &models.UserDTO{}
|
||||||
err := row.Scan(&dto.Id, &dto.Email, &dto.Secret, &dto.Name, &dto.EmailVerified)
|
err := row.Scan(&dto.Id, &dto.Email, &dto.Secret, &dto.FullName, &dto.EmailVerified)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return dto, nil
|
return dto, nil
|
||||||
}
|
}
|
||||||
@ -103,11 +103,11 @@ func (u *userRepo) GetUserByEmail(ctx context.Context, login string) (*models.Us
|
|||||||
_, span := u.tracer.Start(ctx, "postgres::GetUserByEmail")
|
_, span := u.tracer.Start(ctx, "postgres::GetUserByEmail")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
|
|
||||||
query := `select id, email, secret, name, email_verified from users where email = $1;`
|
query := `select id, email, secret, full_name, email_verified from users where email = $1;`
|
||||||
row := u.db.QueryRowContext(ctx, query, login)
|
row := u.db.QueryRowContext(ctx, query, login)
|
||||||
|
|
||||||
dto := &models.UserDTO{}
|
dto := &models.UserDTO{}
|
||||||
err := row.Scan(&dto.Id, &dto.Email, &dto.Secret, &dto.Name, &dto.EmailVerified)
|
err := row.Scan(&dto.Id, &dto.Email, &dto.Secret, &dto.FullName, &dto.EmailVerified)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return dto, nil
|
return dto, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -84,9 +84,9 @@ func (u *userService) CreateUser(ctx context.Context, params UserCreateParams) (
|
|||||||
}
|
}
|
||||||
|
|
||||||
user := models.UserDTO{
|
user := models.UserDTO{
|
||||||
Email: params.Email,
|
Email: params.Email,
|
||||||
Secret: string(secret),
|
Secret: string(secret),
|
||||||
Name: params.Name,
|
FullName: params.Name,
|
||||||
}
|
}
|
||||||
|
|
||||||
result, err := u.deps.UserRepo.CreateUser(ctx, user)
|
result, err := u.deps.UserRepo.CreateUser(ctx, user)
|
||||||
@ -257,8 +257,8 @@ func (u *userService) updatePassword(ctx context.Context, user models.UserDTO, n
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err = u.deps.UserRepo.UpdateUser(ctx, user.Id, models.UserUpdateDTO{
|
if err = u.deps.UserRepo.UpdateUser(ctx, user.Id, models.UserUpdateDTO{
|
||||||
Secret: newSecret,
|
Secret: newSecret,
|
||||||
Name: user.Name,
|
FullName: user.FullName,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,41 @@
|
|||||||
create table if not exists users (
|
create table if not exists users (
|
||||||
id int generated always as identity,
|
id integer primary key generated always as identity,
|
||||||
email text unique not null,
|
email varchar(256) unique not null,
|
||||||
secret text not null,
|
secret varchar(256) not null,
|
||||||
name text not null,
|
full_name varchar(256) not null,
|
||||||
email_verified boolean not null default false,
|
email_verified boolean not null default false,
|
||||||
|
created_at timestamp,
|
||||||
primary key (id)
|
updated_at timestamp
|
||||||
);
|
);
|
||||||
|
|
||||||
create index if not exists users_email_idx on users(email);
|
create index if not exists users_email_idx on users(email);
|
||||||
|
|
||||||
|
create or replace function set_created_at()
|
||||||
|
returns trigger as $$
|
||||||
|
begin
|
||||||
|
new.created_at = now();
|
||||||
|
new.updated_at = now();
|
||||||
|
return new;
|
||||||
|
end;
|
||||||
|
$$ language plpgsql;
|
||||||
|
|
||||||
|
create or replace trigger on_user_created
|
||||||
|
before insert on users
|
||||||
|
for each row
|
||||||
|
execute function set_created_at();
|
||||||
|
|
||||||
|
create or replace function set_updated_at()
|
||||||
|
returns trigger as $$
|
||||||
|
begin
|
||||||
|
if new is distinct from old then
|
||||||
|
new.updated_at = now();
|
||||||
|
end if;
|
||||||
|
return new;
|
||||||
|
end;
|
||||||
|
$$ language plpgsql;
|
||||||
|
|
||||||
|
create or replace trigger on_user_updated
|
||||||
|
before update on users
|
||||||
|
for each row
|
||||||
|
when(new is distinct from old)
|
||||||
|
execute function set_updated_at();
|
||||||
Loading…
x
Reference in New Issue
Block a user