diff --git a/src/internal/server/server.go b/src/internal/server/server.go index 7b31e92..d792e74 100644 --- a/src/internal/server/server.go +++ b/src/internal/server/server.go @@ -90,7 +90,7 @@ func (s *Server) GetCache() *redis.Client { return (s.handlers["cache"]).(*redis.Client) } -func (s *Server) GetDatabase() *pgxpool.Pool { // FIXME hardcoded index issue +func (s *Server) GetDatabase() *pgxpool.Pool { return (s.handlers["database"]).(*pgxpool.Pool) } diff --git a/src/internal/service/auth.go b/src/internal/service/auth.go index d56e111..0862a54 100644 --- a/src/internal/service/auth.go +++ b/src/internal/service/auth.go @@ -4,6 +4,7 @@ import ( "context" "errors" + db "git.ego.freeddns.org/egommerce/identity-service/pkg/database" "github.com/jackc/pgx/v5/pgxpool" ) @@ -44,6 +45,9 @@ func (a *Auth) Register(email, login, passwd string) (string, error) { sql := `INSERT INTO identity.users(email, username, password) VALUES($1, $2, $3) LIMIT 1 RETURNING id` err := a.db.QueryRow(context.Background(), sql, email, login, passwd).Scan(&id) if err != nil { + if err = db.IsDuplicatedRow(err); err != nil { + return "", errors.New("username/email is already taken") + } return "", errors.New("Failed to create new user: " + err.Error()) } diff --git a/src/pkg/database/connect.go b/src/pkg/database/connect.go index e8c889c..1e64d92 100644 --- a/src/pkg/database/connect.go +++ b/src/pkg/database/connect.go @@ -2,7 +2,9 @@ package database import ( "context" + "errors" + "github.com/jackc/pgx/v5/pgconn" "github.com/jackc/pgx/v5/pgxpool" ) @@ -14,3 +16,13 @@ func Connect(connStr string) (*pgxpool.Pool, error) { return pool, nil } + +func IsDuplicatedRow(err error) error { + var pgErr *pgconn.PgError + + if errors.As(err, &pgErr) && pgErr.Code == "23505" { + return errors.New("duplicated row found") + } + + return nil +}