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_mode": file.PreviewMode,
|
||||||
"preview_file_id": file.PreviewFileID,
|
"preview_file_id": file.PreviewFileID,
|
||||||
"uploader_user_id": formatUserID(file.UploaderID),
|
"uploader_user_id": formatUserID(file.UploaderID),
|
||||||
"uploader": userSummary(file.UploaderID, store.UserSummary{}),
|
"uploader": userSummary(file.UploaderID, file.Uploader),
|
||||||
"version": file.Version,
|
"version": file.Version,
|
||||||
"permissions": map[string]any{
|
"permissions": map[string]any{
|
||||||
"can_preview": file.Status == "active",
|
"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) {
|
func assertNoNumericUserIDs(t *testing.T, value any) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
switch typed := value.(type) {
|
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 {
|
FROM im_meeting_note_files WHERE meeting_id=? AND status='active' ORDER BY id DESC`, meetingID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if err := s.hydrateMeetingNoteFilesUploaders(ctx, files); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
return files, nil
|
return files, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1327,9 +1330,42 @@ func (s *Store) meetingNoteFile(ctx context.Context, meetingID, noteFileID strin
|
|||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if err := s.hydrateMeetingNoteFileUploader(ctx, &file); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
return &file, nil
|
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 {
|
func meetingVisible(meeting Meeting, userID int64) bool {
|
||||||
if meeting.OrganizerID == userID || meeting.RecorderID == userID {
|
if meeting.OrganizerID == userID || meeting.RecorderID == userID {
|
||||||
return true
|
return true
|
||||||
|
|||||||
@@ -148,10 +148,11 @@ type MeetingParticipant struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type MeetingNoteFile struct {
|
type MeetingNoteFile struct {
|
||||||
NoteFileID string `db:"note_file_id"`
|
NoteFileID string `db:"note_file_id"`
|
||||||
MeetingID string `db:"meeting_id"`
|
MeetingID string `db:"meeting_id"`
|
||||||
FileID string `db:"file_id"`
|
FileID string `db:"file_id"`
|
||||||
UploaderID int64 `db:"uploader_id"`
|
UploaderID int64 `db:"uploader_id"`
|
||||||
|
Uploader UserSummary
|
||||||
FileName string `db:"file_name"`
|
FileName string `db:"file_name"`
|
||||||
MIMEType string `db:"mime_type"`
|
MIMEType string `db:"mime_type"`
|
||||||
FileSize int64 `db:"file_size"`
|
FileSize int64 `db:"file_size"`
|
||||||
|
|||||||
Reference in New Issue
Block a user