From f38af13dc10d235e2d7f4c4f5001dd8e23220129 Mon Sep 17 00:00:00 2001 From: Nikolai Papin Date: Mon, 21 Jul 2025 23:16:09 +0300 Subject: [PATCH] feat: GetProfileByUsername implemented --- backend/internal/services/profile.go | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/backend/internal/services/profile.go b/backend/internal/services/profile.go index 5e43583..9ea673b 100644 --- a/backend/internal/services/profile.go +++ b/backend/internal/services/profile.go @@ -22,8 +22,10 @@ import ( "easywish/internal/dto" errs "easywish/internal/errors" mapspecial "easywish/internal/utils/mapSpecial" + "errors" "github.com/go-redis/redis/v8" + "github.com/jackc/pgx/v5" "go.uber.org/zap" ) @@ -63,8 +65,32 @@ func (p *profileServiceImpl) GetMyProfile(cinfo dto.ClientInfo) (*dto.ProfileDto return &profileDto, nil } +// TODO: Profile privacy settings checks func (p *profileServiceImpl) GetProfileByUsername(cinfo dto.ClientInfo, username string) (*dto.ProfileDto, error) { - panic("unimplemented") + helper, db, err := database.NewDbHelperTransaction(p.dbctx); if err != nil { + p.log.Error( + "Failed to start transaction", + zap.Error(err)) + return nil, errs.ErrServerError + } + defer helper.Rollback() + + profile, err := db.TXQueries.GetProfileByUsername(db.CTX, username); if err != nil { + if errors.Is(err, pgx.ErrNoRows) { + return nil, errs.ErrNotFound + } + + p.log.Error( + "Failed to get user profile by username", + zap.String("username", username), + zap.Error(err)) + return nil, errs.ErrServerError + } + + var profileDto dto.ProfileDto + mapspecial.MapProfileDto(profile, profileDto) + + return &profileDto, nil } func (p *profileServiceImpl) GetProfileSettings(cinfo dto.ClientInfo) (*dto.ProfileSettingsDto, error) {