tsk-58: Update names of Contact endpoint (#67)

Closes #58

Reviewed-on: phoenix/textsender-api#67
Co-authored-by: phoenix <kundeng00@pm.me>
Co-committed-by: phoenix <kundeng00@pm.me>
This commit is contained in:
phoenix
2026-01-07 20:24:30 +00:00
committed by phoenix
parent 4e250d095c
commit a51979e724
11 changed files with 460 additions and 8 deletions
+70
View File
@@ -16,6 +16,7 @@ type ContactStore interface {
GetContactByPhone(ctx context.Context, phone string, userId uuid.UUID) (*contact.Contact, error)
GetAllContacts(ctx context.Context) ([]*contact.Contact, error)
ContactExists(ctx context.Context, phone string, userId uuid.UUID) (bool, error)
UpdateNames(ctx context.Context, con *contact.Contact, firstname *string, lastname *string, nickname *string) (int64, error)
}
type PGContactStore struct {
@@ -110,3 +111,72 @@ func (s *PGContactStore) ContactExists(ctx context.Context, phone string, userId
return exists, nil
}
func (s *PGContactStore) UpdateNames(ctx context.Context, con *contact.Contact, firstname *string, lastname *string, nickname *string) (int64, error) {
if firstname == nil && lastname == nil && nickname == nil {
return 0, fmt.Errorf("Names are nil")
} else {
if firstname != nil && lastname != nil && nickname != nil {
query := "UPDATE contacts SET first_name = $1, last_name = $2, nickname = $3 WHERE id = $4"
if affected, err := s.db.Exec(ctx, query, firstname, lastname, nickname, con.Id); err != nil {
return 0, err
} else {
con.Firstname = firstname
con.Lastname = lastname
con.Nickname = nickname
return affected.RowsAffected(), nil
}
} else if firstname != nil && lastname != nil {
query := "UPDATE contacts SET first_name = $1, last_name = $2 WHERE id = $3"
if affected, err := s.db.Exec(ctx, query, firstname, lastname, con.Id); err != nil {
return 0, err
} else {
con.Firstname = firstname
con.Lastname = lastname
return affected.RowsAffected(), nil
}
} else if lastname != nil && nickname != nil {
query := "UPDATE contacts SET last_name = $1, nickname = $2 WHERE id = $3"
if affected, err := s.db.Exec(ctx, query, lastname, nickname, con.Id); err != nil {
return 0, err
} else {
con.Lastname = lastname
con.Nickname = nickname
return affected.RowsAffected(), nil
}
} else if nickname != nil && firstname != nil {
query := "UPDATE contacts SET nickname = $1, firstname = $2 WHERE id = $3"
if affected, err := s.db.Exec(ctx, query, nickname, firstname, con.Id); err != nil {
return 0, err
} else {
con.Firstname = firstname
con.Nickname = nickname
return affected.RowsAffected(), nil
}
} else if firstname != nil {
query := "UPDATE contacts SET firstname = $1 WHERE id = $2"
if affected, err := s.db.Exec(ctx, query, firstname, con.Id); err != nil {
return 0, err
} else {
con.Firstname = firstname
return affected.RowsAffected(), nil
}
} else if lastname != nil {
query := "UPDATE contacts SET lastname = $1 WHERE id = $2"
if affected, err := s.db.Exec(ctx, query, lastname, con.Id); err != nil {
return 0, err
} else {
con.Lastname = lastname
return affected.RowsAffected(), nil
}
} else {
query := "UPDATE contacts SET nickname = $1 WHERE id = $2"
if affected, err := s.db.Exec(ctx, query, nickname, con.Id); err != nil {
return 0, err
} else {
con.Nickname = nickname
return affected.RowsAffected(), nil
}
}
}
}
+28
View File
@@ -3,6 +3,7 @@ package mock
import (
"context"
"errors"
"fmt"
"sync"
"git.kundeng.us/phoenix/textsender-models/tx0/contact"
@@ -116,3 +117,30 @@ func (m *MockContactStore) ContactExists(ctx context.Context, phoneNumber string
return exists, nil
}
func (m *MockContactStore) UpdateNames(ctx context.Context, con *contact.Contact, firstname *string, lastname *string, nickname *string) (int64, error) {
m.mu.Lock()
defer m.mu.Unlock()
if m.Error != nil {
return 0, m.Error
} else if firstname == nil && lastname == nil && nickname == nil {
return 0, fmt.Errorf("Names are not provided")
} else {
if c, exists := m.Contacts[*con.Id]; !exists {
return 0, fmt.Errorf("Contact does not exist")
} else {
if firstname != nil {
c.Firstname = firstname
}
if lastname != nil {
c.Lastname = lastname
}
if nickname != nil {
c.Nickname = nickname
}
}
}
return 0, nil
}