fix: hydrate meeting note file uploader
This commit is contained in:
@@ -335,7 +335,7 @@ func meetingNoteFilePayload(file store.MeetingNoteFile, viewer int64) map[string
|
||||
"preview_mode": file.PreviewMode,
|
||||
"preview_file_id": file.PreviewFileID,
|
||||
"uploader_user_id": formatUserID(file.UploaderID),
|
||||
"uploader": userSummary(file.UploaderID, store.UserSummary{}),
|
||||
"uploader": userSummary(file.UploaderID, file.Uploader),
|
||||
"version": file.Version,
|
||||
"permissions": map[string]any{
|
||||
"can_preview": file.Status == "active",
|
||||
|
||||
@@ -115,6 +115,28 @@ func TestMeetingNoteFilePayloadKeepsOriginalNameAndExtension(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMeetingNoteFilePayloadUsesUploaderSummary(t *testing.T) {
|
||||
now := time.Date(2026, 9, 17, 12, 0, 0, 0, time.UTC)
|
||||
payload := meetingNoteFilePayload(store.MeetingNoteFile{
|
||||
NoteFileID: "mnote_1",
|
||||
UploaderID: 1573637795346386944,
|
||||
Uploader: store.UserSummary{
|
||||
UserID: 1573637795346386944,
|
||||
DisplayName: "jcharles3",
|
||||
},
|
||||
Status: "active",
|
||||
CreatedAt: now,
|
||||
UpdatedAt: now,
|
||||
}, 1573637795346386944)
|
||||
uploader, ok := payload["uploader"].(map[string]any)
|
||||
if !ok {
|
||||
t.Fatalf("uploader=%#v", payload["uploader"])
|
||||
}
|
||||
if uploader["display_name"] != "jcharles3" {
|
||||
t.Fatalf("uploader.display_name=%v, want jcharles3", uploader["display_name"])
|
||||
}
|
||||
}
|
||||
|
||||
func assertNoNumericUserIDs(t *testing.T, value any) {
|
||||
t.Helper()
|
||||
switch typed := value.(type) {
|
||||
|
||||
@@ -622,6 +622,9 @@ func (s *Store) MeetingNoteFiles(ctx context.Context, userID int64, meetingID st
|
||||
FROM im_meeting_note_files WHERE meeting_id=? AND status='active' ORDER BY id DESC`, meetingID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := s.hydrateMeetingNoteFilesUploaders(ctx, files); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return files, nil
|
||||
}
|
||||
|
||||
@@ -1327,9 +1330,42 @@ func (s *Store) meetingNoteFile(ctx context.Context, meetingID, noteFileID strin
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
if err := s.hydrateMeetingNoteFileUploader(ctx, &file); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &file, nil
|
||||
}
|
||||
|
||||
func (s *Store) hydrateMeetingNoteFileUploader(ctx context.Context, file *MeetingNoteFile) error {
|
||||
if file == nil {
|
||||
return nil
|
||||
}
|
||||
summaries, err := s.UserSummaries(ctx, []int64{file.UploaderID})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
file.Uploader = summaryOrDefault(file.UploaderID, summaries)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Store) hydrateMeetingNoteFilesUploaders(ctx context.Context, files []MeetingNoteFile) error {
|
||||
if len(files) == 0 {
|
||||
return nil
|
||||
}
|
||||
userIDs := make([]int64, 0, len(files))
|
||||
for _, file := range files {
|
||||
userIDs = append(userIDs, file.UploaderID)
|
||||
}
|
||||
summaries, err := s.UserSummaries(ctx, userIDs)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for i := range files {
|
||||
files[i].Uploader = summaryOrDefault(files[i].UploaderID, summaries)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func meetingVisible(meeting Meeting, userID int64) bool {
|
||||
if meeting.OrganizerID == userID || meeting.RecorderID == userID {
|
||||
return true
|
||||
|
||||
@@ -152,6 +152,7 @@ type MeetingNoteFile struct {
|
||||
MeetingID string `db:"meeting_id"`
|
||||
FileID string `db:"file_id"`
|
||||
UploaderID int64 `db:"uploader_id"`
|
||||
Uploader UserSummary
|
||||
FileName string `db:"file_name"`
|
||||
MIMEType string `db:"mime_type"`
|
||||
FileSize int64 `db:"file_size"`
|
||||
|
||||
Reference in New Issue
Block a user