add triggers for users table

This commit is contained in:
Sergey Chubaryan 2025-02-21 12:08:50 +03:00
parent abf0ff77f0
commit cdd9627af3
5 changed files with 63 additions and 33 deletions

View File

@ -18,7 +18,7 @@ type createUserInput struct {
type createUserOutput struct {
Id string `json:"id"`
Email string `json:"email"`
Name string `json:"name"`
FullName string `json:"fullName"`
}
func NewUserCreateHandler(log logger.Logger, userService services.UserService) gin.HandlerFunc {
@ -39,7 +39,7 @@ func NewUserCreateHandler(log logger.Logger, userService services.UserService) g
return createUserOutput{
Id: user.Id,
Email: user.Email,
Name: user.Name,
FullName: user.FullName,
}, nil
},
)

View File

@ -5,10 +5,10 @@ type UserDTO struct {
Email string
EmailVerified bool
Secret string
Name string
FullName string
}
type UserUpdateDTO struct {
Secret string
Name string
FullName string
}

View File

@ -38,8 +38,8 @@ func (u *userRepo) CreateUser(ctx context.Context, dto models.UserDTO) (*models.
_, span := u.tracer.Start(ctx, "postgres::CreateUser")
defer span.End()
query := `insert into users (email, secret, name) values ($1, $2, $3) returning id;`
row := u.db.QueryRowContext(ctx, query, dto.Email, dto.Secret, dto.Name)
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.FullName)
id := ""
if err := row.Scan(&id); err != nil {
@ -50,7 +50,7 @@ func (u *userRepo) CreateUser(ctx context.Context, dto models.UserDTO) (*models.
Id: id,
Email: dto.Email,
Secret: dto.Secret,
Name: dto.Name,
FullName: dto.FullName,
}, nil
}
@ -58,8 +58,8 @@ func (u *userRepo) UpdateUser(ctx context.Context, userId string, dto models.Use
_, span := u.tracer.Start(ctx, "postgres::UpdateUser")
defer span.End()
query := `update users set secret=$1, name=$2 where id = $3;`
_, err := u.db.ExecContext(ctx, query, dto.Secret, dto.Name, userId)
query := `update users set secret=$1, full_name=$2 where id = $3;`
_, err := u.db.ExecContext(ctx, query, dto.Secret, dto.FullName, userId)
if err != nil {
return err
}
@ -84,11 +84,11 @@ func (u *userRepo) GetUserById(ctx context.Context, id string) (*models.UserDTO,
_, span := u.tracer.Start(ctx, "postgres::GetUserById")
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)
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 {
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")
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)
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 {
return dto, nil
}

View File

@ -86,7 +86,7 @@ func (u *userService) CreateUser(ctx context.Context, params UserCreateParams) (
user := models.UserDTO{
Email: params.Email,
Secret: string(secret),
Name: params.Name,
FullName: params.Name,
}
result, err := u.deps.UserRepo.CreateUser(ctx, user)
@ -258,7 +258,7 @@ func (u *userService) updatePassword(ctx context.Context, user models.UserDTO, n
if err = u.deps.UserRepo.UpdateUser(ctx, user.Id, models.UserUpdateDTO{
Secret: newSecret,
Name: user.Name,
FullName: user.FullName,
}); err != nil {
return err
}

View File

@ -1,11 +1,41 @@
create table if not exists users (
id int generated always as identity,
email text unique not null,
secret text not null,
name text not null,
id integer primary key generated always as identity,
email varchar(256) unique not null,
secret varchar(256) not null,
full_name varchar(256) not null,
email_verified boolean not null default false,
primary key (id)
created_at timestamp,
updated_at timestamp
);
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();