Implement greet inbox and outbox

- Add user_greet model and startup table sync
- Implement /greet/user and /greet/delete handlers
- Implement noticeFriendGreeting inbox and noticeUserGreetingHistory outbox
- Return peer profile and center unit info for greeting notices
- Update login topInfo friend greet counters from unread inbox messages

Signed-off-by: Sean Du <do4suki@gmail.com>
This commit is contained in:
2026-06-05 01:54:59 +08:00
parent d48293be44
commit 101f7e8a3f
16 changed files with 641 additions and 15 deletions
+49 -3
View File
@@ -2,9 +2,11 @@ package notice
import (
"honoka-chan/internal/middleware"
usermodel "honoka-chan/internal/model/user"
"honoka-chan/internal/router"
noticeschema "honoka-chan/internal/schema/notice"
"honoka-chan/internal/session"
honokautils "honoka-chan/internal/utils"
"time"
"github.com/gin-gonic/gin"
@@ -14,11 +16,55 @@ func userGreetingHistory(ctx *gin.Context) {
ss := session.Get(ctx)
defer ss.Finalize()
req := noticeschema.GreetingNoticeReq{}
err := honokautils.ParseRequestData(ctx, &req)
if ss.CheckErr(err) {
return
}
totalCount, err := ss.UserEng.Table(new(usermodel.UserGreet)).
Where("affector_id = ?", ss.UserID).
Where("deleted_from_affector = ?", false).
Count()
if ss.CheckErr(err) {
return
}
rows := []usermodel.UserGreet{}
err = ss.UserEng.Table(new(usermodel.UserGreet)).
Where("affector_id = ?", ss.UserID).
Where("deleted_from_affector = ?", false).
OrderBy("notice_id DESC").
Limit(usermodel.GreetingPageSize).
Find(&rows)
if ss.CheckErr(err) {
return
}
noticeList := make([]noticeschema.UserGreetingNotice, 0, len(rows))
for _, row := range rows {
receiver, err := getGreetingPeer(ss, row.ReceiverID)
if ss.CheckErr(err) {
return
}
noticeList = append(noticeList, noticeschema.UserGreetingNotice{
NoticeID: row.NoticeID,
ReferenceTable: 6,
Message: row.Message,
ListMessage: row.Message,
InsertDate: formatGreetingElapsedTime(row.InsertDate),
Receiver: receiver,
ReplyFlag: row.Reply,
Readed: row.Readed,
})
}
ss.Respond(noticeschema.UserGreetingResp{
ResponseData: noticeschema.UserGreetingData{
ItemCount: 0,
HasNext: false,
NoticeList: []any{},
ItemCount: int(totalCount),
HasNext: totalCount > int64(len(rows)),
NoticeList: noticeList,
ServerTimestamp: time.Now().Unix(),
},
ReleaseInfo: []any{},