fix: hydrate meeting note file uploader

This commit is contained in:
richjohnrambo
2026-09-21 11:02:36 +08:00
parent 06e3f0b489
commit 53accc3e3f
4 changed files with 64 additions and 5 deletions
+1 -1
View File
@@ -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",
+22
View File
@@ -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) {
+36
View File
@@ -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
+1
View File
@@ -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"`