From 21d5775a5199747401c723b045fcbd98c65a5782 Mon Sep 17 00:00:00 2001 From: Sergey Chubaryan Date: Mon, 2 Dec 2024 21:47:51 +0300 Subject: [PATCH] init tables in postgres --- docker-compose.yaml | 8 +++++- helper/main.go | 44 +++++++++++++++++++++---------- sql/03_action_token.sql | 2 +- sql/init.sh | 9 +++++++ src/core/services/user_service.go | 3 +++ src/server/server.go | 5 ++++ 6 files changed, 55 insertions(+), 16 deletions(-) create mode 100755 sql/init.sh diff --git a/docker-compose.yaml b/docker-compose.yaml index 6f8f840..8dfad49 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -16,10 +16,16 @@ services: -c checkpoint_completion_target=0.9 -c wal_buffers=16MB -c default_statistics_target=100 + healthcheck: + test: ["CMD-SHELL", "psql -U postgres -d postgres -c 'SELECT 1' || exit 1"] + interval: 2s + timeout: 10s + retries: 5 ports: - 5432:5432 volumes: - postgres-volume:/var/lib/postgresql/data + - ./sql:/docker-entrypoint-initdb.d environment: - POSTGRES_DB=postgres - POSTGRES_USER=postgres @@ -72,7 +78,7 @@ services: - 4318:4318 # OTLP http receiver tempo-init: - image: &tempoImage grafana/tempo:2.3.1 + image: &tempoImage grafana/tempo:r177-60780f7 user: root entrypoint: - "chown" diff --git a/helper/main.go b/helper/main.go index 19fe077..425165b 100644 --- a/helper/main.go +++ b/helper/main.go @@ -2,10 +2,12 @@ package main import ( "context" + "encoding/json" "io" "log" "github.com/segmentio/kafka-go" + "gopkg.in/gomail.v2" ) // type emailHelper struct { @@ -40,31 +42,23 @@ import ( func main() { const ( - SMTP_SERVER = "" - SMTP_PORT = 0 - SMTP_LOGIN = "" - SMTP_PASSWORD = "" + SMTP_SERVER = "smtp.yandex.ru" + SMTP_PORT = 587 + SMTP_LOGIN = "serghio2@yandex.ru" + SMTP_PASSWORD = "ercutguhcfuzbvyl" ) ctx := context.Background() - // d := gomail.NewDialer(SMTP_SERVER, SMTP_PORT, SMTP_LOGIN, SMTP_PASSWORD) - - // conn, err := kafka.DialLeader(ctx, "", "") - // if err != nil { - // panic(err) - // } - // defer conn.Close() + d := gomail.NewDialer(SMTP_SERVER, SMTP_PORT, SMTP_LOGIN, SMTP_PASSWORD) log.Println("starting reader...") r := kafka.NewReader(kafka.ReaderConfig{ Brokers: []string{"localhost:9092"}, - Topic: "topic-A", - // Partition: 0, + Topic: "backend_events", GroupID: "consumer-group-id", }) - // r.SetOffset(kafka.FirstOffset) log.Println("reader started") @@ -83,6 +77,28 @@ func main() { if err := r.CommitMessages(ctx, msg); err != nil { log.Fatalf("failed to commit: %s\n", err.Error()) + continue + } + + value := struct { + Email string `json:"email"` + Token string `json:"token"` + }{} + + if err := json.Unmarshal(msg.Value, &value); err != nil { + log.Fatalf("failed to unmarshal: %s\n", err.Error()) + continue + } + + m := gomail.NewMessage() + m.SetHeader("From", m.FormatAddress("serghio2@yandex.ru", "Pet Backend")) + m.SetHeader("To", value.Email) + m.SetHeader("Subject", "Hello!") + m.SetBody("text/html", "Test backend") + + if err := d.DialAndSend(m); err != nil { + log.Fatalf("failed to send email: %s\n", err.Error()) + continue } } } diff --git a/sql/03_action_token.sql b/sql/03_action_token.sql index 532d0eb..697f750 100644 --- a/sql/03_action_token.sql +++ b/sql/03_action_token.sql @@ -1,7 +1,7 @@ create table if not exists action_tokens ( id int generated always as identity, user_id int, - value text + value text, target int, expiration timestamp, diff --git a/sql/init.sh b/sql/init.sh new file mode 100755 index 0000000..03c5937 --- /dev/null +++ b/sql/init.sh @@ -0,0 +1,9 @@ +# FILES=( +# "01_user.sql" +# "02_shortlinks.sql" +# "03_action_tokens.sql" +# ) + +# for file in ${FILES[@]}; do +# psql -U postgres -d postgres -f $file +# done \ No newline at end of file diff --git a/src/core/services/user_service.go b/src/core/services/user_service.go index a718613..d1fa5d1 100644 --- a/src/core/services/user_service.go +++ b/src/core/services/user_service.go @@ -29,6 +29,7 @@ type UserService interface { CreateUser(ctx context.Context, params UserCreateParams) (*models.UserDTO, error) AuthenticateUser(ctx context.Context, login, password string) (string, error) ValidateToken(ctx context.Context, tokenStr string) (*models.UserDTO, error) + HelpPasswordForgot(ctx context.Context, userId string) error } func NewUserService(deps UserServiceDeps) UserService { @@ -84,6 +85,8 @@ func (u *userService) CreateUser(ctx context.Context, params UserCreateParams) ( return nil, err } + u.deps.EventRepo.SendEmailForgotPassword(ctx, user.Email, "123") + u.deps.UserCache.Set(result.Id, *result, cache.Expiration{Ttl: userCacheTtl}) return result, nil diff --git a/src/server/server.go b/src/server/server.go index b266cdd..5dcee9d 100644 --- a/src/server/server.go +++ b/src/server/server.go @@ -7,6 +7,7 @@ import ( "backend/src/logger" "backend/src/server/handlers" "backend/src/server/middleware" + "backend/src/server/utils" "context" "fmt" "net" @@ -61,6 +62,10 @@ func New(opts NewServerOpts) *Server { { dummyGroup.Use(middleware.NewAuthMiddleware(opts.UserService)) dummyGroup.GET("", handlers.NewDummyHandler()) + dummyGroup.POST("/forgot-password", func(c *gin.Context) { + user := utils.GetUserFromRequest(c) + opts.UserService.HelpPasswordForgot(c, user.Id) + }) } return &Server{