Add announcement and read-tracking models with active/unread query helpers for the operations announcement system.
34 lines
990 B
Go
34 lines
990 B
Go
package model
|
|
|
|
import "time"
|
|
|
|
type AnnouncementRead struct {
|
|
Id int `json:"id" gorm:"primaryKey;autoIncrement"`
|
|
AnnouncementId int `json:"announcement_id" gorm:"not null;index:idx_announcement_read_user,unique"`
|
|
UserId int `json:"user_id" gorm:"not null;index:idx_announcement_read_user,unique"`
|
|
ReadAt time.Time `json:"read_at" gorm:"not null"`
|
|
}
|
|
|
|
func (AnnouncementRead) TableName() string {
|
|
return "announcement_reads"
|
|
}
|
|
|
|
func (r *AnnouncementRead) Insert() error {
|
|
return DB.Create(r).Error
|
|
}
|
|
|
|
func IsAnnouncementRead(announcementId int, userId int) (bool, error) {
|
|
var count int64
|
|
err := DB.Model(&AnnouncementRead{}).
|
|
Where("announcement_id = ? AND user_id = ?", announcementId, userId).
|
|
Count(&count).Error
|
|
return count > 0, err
|
|
}
|
|
|
|
type AnnouncementReadStatus struct {
|
|
UserId int `json:"user_id"`
|
|
Username string `json:"username"`
|
|
ReadAt *time.Time `json:"read_at"`
|
|
IsRead bool `json:"is_read"`
|
|
}
|