added rows close, get group members route

This commit is contained in:
slawk0
2025-02-08 16:13:53 +01:00
parent e8d8c51d64
commit bbae0e8fbb
6 changed files with 93 additions and 0 deletions

View File

@@ -289,6 +289,7 @@ func GetContacts(db *sql.DB, userID uuid.UUID) ([]*model.Contact, error) {
if err != nil {
return []*model.Contact{}, helpers.NewError(helpers.ErrInternal, "Failed to get contacts", fmt.Errorf("failed to get contacts: %w", err))
}
defer rows.Close()
var contacts []*model.Contact
for rows.Next() {
@@ -330,6 +331,7 @@ func ContactSuggestion(db *sql.DB, contactUsername string) ([]string, error) {
if err != nil && !errors.Is(err, sql.ErrNoRows) {
return []string{}, helpers.NewError(helpers.ErrInternal, "Failed to get contact suggestions", fmt.Errorf("failed to get contact suggestions: %w", err))
}
defer rows.Close()
var suggestions []string
for rows.Next() {

View File

@@ -5,6 +5,7 @@ import (
"fmt"
"github.com/google/uuid"
"relay-server/helpers"
"relay-server/model"
)
func CreateGroup(db *sql.DB, groupName string, userID uuid.UUID) (uuid.UUID, error) {
@@ -64,6 +65,45 @@ func AddMemberToGroup(db *sql.DB, userID uuid.UUID, groupID uuid.UUID) (uuid.UUI
return memberID, nil
}
func GetMembers(db *sql.DB, groupID uuid.UUID) ([]*model.Member, error) {
query := `
SELECT
a.user_id,
a.username,
CASE
WHEN ga.user_id IS NOT NULL THEN TRUE
ELSE FALSE
END AS isAdmin,
COALESCE(ga.is_owner, FALSE) AS isOwner
FROM Memberships m
JOIN Accounts a ON m.user_id = a.user_id
LEFT JOIN GroupAdmins ga ON m.user_id = ga.user_id AND m.conversation_id = ga.conversation_id
WHERE m.conversation_id = $1;
`
rows, err := db.Query(query, groupID)
if err != nil {
return []*model.Member{}, helpers.NewError(helpers.ErrInternal, "Failed to get members", fmt.Errorf("failed to get members: %w", err))
}
defer rows.Close()
var members []*model.Member
for rows.Next() {
var member model.Member
err = rows.Scan(&member.UserID, &member.Username, &member.IsAdmin, &member.IsOwner)
if err != nil {
return []*model.Member{}, helpers.NewError(helpers.ErrInternal, "Failed to get members", fmt.Errorf("failed to scan member: %w", err))
}
members = append(members, &member)
}
if err = rows.Err(); err != nil {
return []*model.Member{}, helpers.NewError(helpers.ErrInternal, "Failed to get members", fmt.Errorf("error iterating members: %w", err))
}
return members, nil
}
func IsAdmin(db *sql.DB, userID uuid.UUID, conversationID uuid.UUID) (bool, error) {
query := `
SELECT COUNT(1) FROM GroupAdmins
@@ -77,3 +117,17 @@ func IsAdmin(db *sql.DB, userID uuid.UUID, conversationID uuid.UUID) (bool, erro
}
return count > 0, nil
}
func IsMember(db *sql.DB, userID uuid.UUID, conversationID uuid.UUID) (bool, error) {
query := `
SELECT COUNT(1) FROM Memberships
WHERE user_id = $1
AND conversation_id = $2;
`
var count int
err := db.QueryRow(query, userID, conversationID).Scan(&count)
if err != nil {
return false, helpers.NewError(helpers.ErrInternal, "Failed to check membership", fmt.Errorf("failed to check membership: %w", err))
}
return count > 0, nil
}

View File

@@ -35,6 +35,7 @@ func GetMessages(db *sql.DB, userID uuid.UUID, conversationID uuid.UUID, limit i
if err != nil {
return []*model.Message{}, helpers.NewError(helpers.ErrInternal, "Failed to get messages", fmt.Errorf("failed to get messages: %w", err))
}
defer rows.Close()
for rows.Next() {
message := &model.Message{}
@@ -66,6 +67,7 @@ func GetMessages(db *sql.DB, userID uuid.UUID, conversationID uuid.UUID, limit i
if err != nil {
return []*model.Message{}, helpers.NewError(helpers.ErrInternal, "Failed to get messages", fmt.Errorf("failed to get messages: %w", err))
}
defer rows.Close()
for rows.Next() {
message := &model.Message{}