From 950fa9fd96589a567268c75dca363d029720e4ee Mon Sep 17 00:00:00 2001 From: nquidox Date: Thu, 26 Mar 2026 20:29:58 +0300 Subject: [PATCH] me request + dto --- internal/user/controller.go | 35 +++++++++++++++++++++++++++++++++++ internal/user/dto.go | 5 +++++ internal/user/repository.go | 12 ++++++++++++ internal/user/service.go | 8 ++++++++ 4 files changed, 60 insertions(+) create mode 100644 internal/user/dto.go diff --git a/internal/user/controller.go b/internal/user/controller.go index 3393ace..9920832 100644 --- a/internal/user/controller.go +++ b/internal/user/controller.go @@ -85,3 +85,38 @@ func (co *controller) delete(c *gin.Context) { c.Status(http.StatusNoContent) } + +// me godoc +// +// @Summary Returns user data +// @Description Returns user data +// @Tags User +// @Accept json +// @Success 200 {object} MeDTO +// @Failure 400 {object} responses.BadRequest +// @Failure 401 {object} responses.Unauthorized +// @Failure 404 {object} responses.NotFound +// @Failure 500 {object} responses.InternalServerError +// @Router /user [DELETE] +func (co *controller) me(c *gin.Context) { + u, err := co.utils.GetUserUuidFromContext(c) + if err != nil { + c.JSON(http.StatusBadRequest, responses.BadRequest{Error: err.Error()}) + appLog.LogErr(pkgLogHeader, controllerLogHeader, err) + return + } + + response, err := co.service.getUser(c, u) + if err != nil { + c.JSON(http.StatusInternalServerError, responses.InternalServerError{Error: err.Error()}) + appLog.LogErr(pkgLogHeader, controllerLogHeader, err) + return + } + + if response == nil { + c.Status(http.StatusNoContent) + return + } + + c.JSON(http.StatusOK, response) +} diff --git a/internal/user/dto.go b/internal/user/dto.go new file mode 100644 index 0000000..989b3ec --- /dev/null +++ b/internal/user/dto.go @@ -0,0 +1,5 @@ +package user + +type MeDTO struct { + UserUuid string `json:"userUuid"` +} diff --git a/internal/user/repository.go b/internal/user/repository.go index e2d24ff..cff2b9a 100644 --- a/internal/user/repository.go +++ b/internal/user/repository.go @@ -10,6 +10,7 @@ type Repository interface { getUserId(ctx context.Context, userUuid string) (int64, error) addUser(ctx context.Context, u *userModel) error deleteUser(ctx context.Context, userUuid string, deletedAt sql.NullTime) error + getUser(ctx context.Context, userUuid string) (*MeDTO, error) } type repo struct { @@ -47,3 +48,14 @@ func (r *repo) deleteUser(ctx context.Context, userUuid string, deletedAt sql.Nu _, err := r.db.Exec(ctx, q, deletedAt, userUuid) return err } + +func (r *repo) getUser(ctx context.Context, userUuid string) (*MeDTO, error) { + q := `SELECT uuid FROM users WHERE uuid = $1 AND deleted_at IS NULL LIMIT 1` + row := r.db.QueryRow(ctx, q, userUuid) + u := &MeDTO{} + + if err := row.Scan(&u.UserUuid); err != nil { + return nil, err + } + return u, nil +} diff --git a/internal/user/service.go b/internal/user/service.go index f7bf0db..bff395e 100644 --- a/internal/user/service.go +++ b/internal/user/service.go @@ -40,3 +40,11 @@ func (s *service) createUser(ctx context.Context, userUuid string) error { func (s *service) deleteUser(ctx context.Context, userUuid string) error { return s.repo.deleteUser(ctx, userUuid, s.utils.NullTimeNowUTC()) } + +func (s *service) getUser(ctx context.Context, userUuid string) (*MeDTO, error) { + if userUuid == "" { + return nil, errors.New("user uuid is empty") + } + + return s.repo.getUser(ctx, userUuid) +}