Enhance chat retrieval in Xun by adding filtering and validation
- Updated GetChats method to filter out empty chat IDs, ensuring only valid chats are processed. - Improved date handling by refining the logic for grouping chats into "This Week" and "Last Week" categories. - Enhanced error handling for created_at field parsing, supporting multiple date formats for better robustness. - Streamlined chat grouping logic for clearer organization of chat data in responses.
This commit is contained in:
parent
fe8b3df163
commit
9598d000cd
1 changed files with 23 additions and 12 deletions
|
|
@ -262,7 +262,8 @@ func (conv *Xun) GetChats(sid string, filter ChatFilter) (*ChatGroupResponse, er
|
||||||
// Build base query
|
// Build base query
|
||||||
qb := conv.newQueryChat().
|
qb := conv.newQueryChat().
|
||||||
Select("chat_id", "title", "created_at").
|
Select("chat_id", "title", "created_at").
|
||||||
Where("sid", userID)
|
Where("sid", userID).
|
||||||
|
Where("chat_id", "!=", "")
|
||||||
|
|
||||||
// Add keyword filter
|
// Add keyword filter
|
||||||
if filter.Keywords != "" {
|
if filter.Keywords != "" {
|
||||||
|
|
@ -296,6 +297,7 @@ func (conv *Xun) GetChats(sid string, filter ChatFilter) (*ChatGroupResponse, er
|
||||||
yesterday := today.AddDate(0, 0, -1)
|
yesterday := today.AddDate(0, 0, -1)
|
||||||
thisWeekStart := today.AddDate(0, 0, -int(today.Weekday()))
|
thisWeekStart := today.AddDate(0, 0, -int(today.Weekday()))
|
||||||
lastWeekStart := thisWeekStart.AddDate(0, 0, -7)
|
lastWeekStart := thisWeekStart.AddDate(0, 0, -7)
|
||||||
|
lastWeekEnd := thisWeekStart.AddDate(0, 0, -1)
|
||||||
|
|
||||||
groups := map[string][]map[string]interface{}{
|
groups := map[string][]map[string]interface{}{
|
||||||
"Today": {},
|
"Today": {},
|
||||||
|
|
@ -306,23 +308,32 @@ func (conv *Xun) GetChats(sid string, filter ChatFilter) (*ChatGroupResponse, er
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, row := range rows {
|
for _, row := range rows {
|
||||||
|
chatID := row.Get("chat_id")
|
||||||
|
if chatID == nil || chatID == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
chat := map[string]interface{}{
|
chat := map[string]interface{}{
|
||||||
"chat_id": row.Get("chat_id"),
|
"chat_id": chatID,
|
||||||
"title": row.Get("title"),
|
"title": row.Get("title"),
|
||||||
}
|
}
|
||||||
|
|
||||||
createdAt, ok := row.Get("created_at").(time.Time)
|
var createdAt time.Time
|
||||||
if !ok {
|
switch v := row.Get("created_at").(type) {
|
||||||
// Try to parse string if it's not already time.Time
|
case time.Time:
|
||||||
if timeStr, ok := row.Get("created_at").(string); ok {
|
createdAt = v
|
||||||
var err error
|
case string:
|
||||||
createdAt, err = time.Parse(time.RFC3339, timeStr)
|
parsed, err := time.Parse("2006-01-02 15:04:05.999999-07:00", v)
|
||||||
|
if err != nil {
|
||||||
|
// Try alternative format
|
||||||
|
parsed, err = time.Parse(time.RFC3339, v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
|
createdAt = parsed
|
||||||
|
default:
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
createdDate := createdAt.Truncate(24 * time.Hour)
|
createdDate := createdAt.Truncate(24 * time.Hour)
|
||||||
|
|
@ -332,9 +343,9 @@ func (conv *Xun) GetChats(sid string, filter ChatFilter) (*ChatGroupResponse, er
|
||||||
groups["Today"] = append(groups["Today"], chat)
|
groups["Today"] = append(groups["Today"], chat)
|
||||||
case createdDate.Equal(yesterday):
|
case createdDate.Equal(yesterday):
|
||||||
groups["Yesterday"] = append(groups["Yesterday"], chat)
|
groups["Yesterday"] = append(groups["Yesterday"], chat)
|
||||||
case createdDate.After(thisWeekStart) || createdDate.Equal(thisWeekStart):
|
case createdDate.After(thisWeekStart) && createdDate.Before(today):
|
||||||
groups["This Week"] = append(groups["This Week"], chat)
|
groups["This Week"] = append(groups["This Week"], chat)
|
||||||
case createdDate.After(lastWeekStart) || createdDate.Equal(lastWeekStart):
|
case createdDate.After(lastWeekStart) && createdDate.Before(lastWeekEnd.AddDate(0, 0, 1)):
|
||||||
groups["Last Week"] = append(groups["Last Week"], chat)
|
groups["Last Week"] = append(groups["Last Week"], chat)
|
||||||
default:
|
default:
|
||||||
groups["Even Earlier"] = append(groups["Even Earlier"], chat)
|
groups["Even Earlier"] = append(groups["Even Earlier"], chat)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue